summaryrefslogtreecommitdiff
path: root/daemon/gdm.h
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/gdm.h')
-rw-r--r--daemon/gdm.h1438
1 files changed, 0 insertions, 1438 deletions
diff --git a/daemon/gdm.h b/daemon/gdm.h
deleted file mode 100644
index 160d573b..00000000
--- a/daemon/gdm.h
+++ /dev/null
@@ -1,1438 +0,0 @@
-/* GDM - The GNOME Display Manager
- * Copyright (C) 1998, 1999, 2000 Martin K. Petersen <mkp@mkp.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef GDM_H
-#define GDM_H
-
-#include <glib.h>
-#include <glib/gstdio.h>
-#include <X11/Xlib.h>
-#include <X11/Xmd.h>
-#include <X11/Xauth.h>
-#include <netinet/in.h>
-#include <time.h>
-
-#define GDM_MAX_PASS 256 /* Define a value for password length. Glibc
- * leaves MAX_PASS undefined. */
-
-#define STX 0x2 /* Start of txt */
-#define BEL 0x7 /* Bell, used to interrupt login for
- * say timed login or something similar */
-
-#define TYPE_STATIC 1 /* X server defined in GDM configuration */
-#define TYPE_XDMCP 2 /* Remote display/Xserver */
-#define TYPE_FLEXI 3 /* Local Flexi X server */
-#define TYPE_FLEXI_XNEST 4 /* Local Flexi Xnest server */
-#define TYPE_XDMCP_PROXY 5 /* Proxy X server for XDMCP */
-
-#define SERVER_IS_LOCAL(d) ((d)->type == TYPE_STATIC || \
- (d)->type == TYPE_FLEXI || \
- (d)->type == TYPE_FLEXI_XNEST || \
- (d)->type == TYPE_XDMCP_PROXY)
-#define SERVER_IS_FLEXI(d) ((d)->type == TYPE_FLEXI || \
- (d)->type == TYPE_FLEXI_XNEST || \
- (d)->type == TYPE_XDMCP_PROXY)
-#define SERVER_IS_PROXY(d) ((d)->type == TYPE_FLEXI_XNEST || \
- (d)->type == TYPE_XDMCP_PROXY)
-#define SERVER_IS_XDMCP(d) ((d)->type == TYPE_XDMCP || \
- (d)->type == TYPE_XDMCP_PROXY)
-
-/* These are the servstat values, also used as server
- * process exit codes */
-#define SERVER_TIMEOUT 2 /* Server didn't start */
-#define SERVER_DEAD 250 /* Server stopped */
-#define SERVER_PENDING 251 /* Server started but not ready for connections yet */
-#define SERVER_RUNNING 252 /* Server running and ready for connections */
-#define SERVER_ABORT 253 /* Server failed badly. Suspending display. */
-
-/* DO NOTE USE 1, that's used as error if x connection fails usually */
-/* Note that there is no reason why these were a power of two, and note
- * that they have to fit in 256 */
-/* These are the exit codes */
-#define DISPLAY_REMANAGE 2 /* Restart display */
-#define DISPLAY_ABORT 4 /* Houston, we have a problem */
-#define DISPLAY_REBOOT 8 /* Rebewt */
-#define DISPLAY_HALT 16 /* Halt */
-#define DISPLAY_SUSPEND 17 /* Suspend (don't use, use the interrupt) */
-#define DISPLAY_CHOSEN 20 /* successful chooser session,
- restart display */
-#define DISPLAY_RUN_CHOOSER 30 /* Run chooser */
-#define DISPLAY_XFAILED 64 /* X failed */
-#define DISPLAY_GREETERFAILED 65 /* greeter failed (crashed) */
-#define DISPLAY_RESTARTGREETER 127 /* Restart greeter */
-#define DISPLAY_RESTARTGDM 128 /* Restart GDM */
-
-enum {
- DISPLAY_UNBORN /* Not yet started */,
- DISPLAY_ALIVE /* Yay! we're alive (non-XDMCP) */,
- XDMCP_PENDING /* Pending XDMCP display */,
- XDMCP_MANAGED /* Managed XDMCP display */,
- DISPLAY_DEAD /* Left for dead */,
- DISPLAY_CONFIG /* in process of being configured */
-};
-
-/* Opcodes for the highly sophisticated protocol used for
- * daemon<->greeter communications */
-
-/* This will change if there are incompatible
- * protocol changes */
-#define GDM_GREETER_PROTOCOL_VERSION "3"
-
-#define GDM_MSG 'D'
-#define GDM_NOECHO 'U'
-#define GDM_PROMPT 'N'
-#define GDM_SESS 'G'
-#define GDM_LANG '&'
-#define GDM_SSESS 'C'
-#define GDM_SLANG 'R'
-#define GDM_RESET 'A'
-#define GDM_QUIT 'P'
-/* Well these aren't as nice as above, oh well */
-#define GDM_STARTTIMER 's'
-#define GDM_STOPTIMER 'S'
-#define GDM_SETLOGIN 'l' /* this just sets the login to be this, just for
- the greeters knowledge */
-#define GDM_DISABLE '-' /* disable the login screen */
-#define GDM_ENABLE '+' /* enable the login screen */
-#define GDM_RESETOK 'r' /* reset but don't shake */
-#define GDM_NEEDPIC '#' /* need a user picture?, sent after greeter
- * is started */
-#define GDM_READPIC '%' /* Send a user picture in a temp file */
-#define GDM_ERRBOX 'e' /* Puts string in the error box */
-#define GDM_ERRDLG 'E' /* Puts string up in an error dialog */
-#define GDM_NOFOCUS 'f' /* Don't focus the login window (optional) */
-#define GDM_FOCUS 'F' /* Allow focus on the login window again (optional) */
-#define GDM_SAVEDIE '!' /* Save wm order and die (and set busy cursor) */
-#define GDM_QUERY_CAPSLOCK 'Q' /* Is capslock on? */
-
-/* Different login interruptions */
-#define GDM_INTERRUPT_TIMED_LOGIN 'T'
-#define GDM_INTERRUPT_CONFIGURE 'C'
-#define GDM_INTERRUPT_SUSPEND 'S'
-#define GDM_INTERRUPT_SELECT_USER 'U'
-#define GDM_INTERRUPT_LOGIN_SOUND 'L'
-#define GDM_INTERRUPT_THEME 'H'
-#define GDM_INTERRUPT_CUSTOM_CMD 'M'
-#define GDM_INTERRUPT_CANCEL 'X'
-
-/* List delimiter for config file lists */
-#define GDM_DELIMITER_MODULES ":"
-#define GDM_DELIMITER_THEMES "/:"
-
-/* The dreaded miscellaneous category */
-#define FIELD_SIZE 256
-#define PIPE_SIZE 4096
-
-/*
- * The following section contains keys used by the GDM configuration files.
- * The key/value pairs defined in the GDM configuration files are considered
- * "stable" interface and should only change in ways that are backwards
- * compatible. Please keep this in mind when changing GDM configuration.
- *
- * Developers who add new configuration options should ensure that they do the
- * following:
- *
- * + Edit the config/gdm.conf file to include the default setting.
- *
- * + Specify the same default in this file as in the config/gdm.conf.in file.
- *
- * + Update the gdm_config_init function in daemon/gdmconfig.c to add the
- * new key. Include some documentation about the new key, following the
- * style of existing comments.
- *
- * + Add any validation to the _gdm_set_value_string, _gdm_set_value_int,
- * and/or _gdm_set_value_bool functions (depending on the type of the new
- * key) in gdmconfig.c, if validation is needed.
- *
- * + If GDM_UPDATE_CONFIG should not respond to this configuration setting,
- * update the update_config function in gdmconfig.c to return FALSE for
- * this key. Examples include changing the PidFile, ServAuthDir, or
- * other values that GDM should not change until it is restarted. If
- * this is true, the next bullet can be ignored.
- *
- * + If the option should cause the greeter (gdmlogin/gdmgreeter) program to
- * be updated immediately, make sure to update the appropriate
- * _gdm_set_value_* function in gdmconfig.c. This function calls the
- * notify_displays_* function to call when this value is changed, so you
- * will need to add your new config value to the list of values sending
- * such notification. Supporting logic will need to be added to
- * gdm_slave_handle_notify function in slave.c to process the notify.
- * It should be clear to see how to do this from the existing code.
- *
- * + Add the key to the gdm_read_config and gdm_reread_config functions in
- * gui/gdmlogin.c, gui/gdmchooser.c, and gui/greeter/greeter.c
- * if the key is used by those programs. Note that all GDM slaves load
- * all their configuration data between calls to gdmcomm_comm_bulk_start()
- * and gdmcomm_comm_bulk_stop(). This makes sure that the slave only uses
- * a single sockets connection to get all configuration data. If a new
- * config value is read by a slave, make sure to load the key in this
- * code section for best performance.
- *
- * + The gui/gdmsetup.c program should be updated to support the new option
- * unless there's a good reason not to (like it is a configuration value
- * that only someone who really knows what they are doing should change
- * like GDM_KEY_PID_FILE).
- *
- * + Currently GDM treats any key in the "gui" and "greeter" categories,
- * and security/PamStack as available for per-display configuration.
- * If a key is appropriate for per-display configuration, and is not
- * in the "gui" or "greeter" categories, then it will need to be added
- * to the gdm_config_key_to_string_per_display function. It may make
- * sense for some keys used by the daemon to be per-display so this
- * will need to be coded (refer to GDM_KEY_PAM_STACK for an example).
- *
- * + Update the docs/C/gdm.xml file to include information about the new
- * option. Include information about any other interfaces (such as
- * ENVIRONMENT variables) that may affect the configuration option.
- * Patches without documentation will not be accepted.
- *
- * Please do this work *before* submitting an patch. Patches that are not
- * complete will not likely be accepted.
- */
-
-/* Configuration constants */
-#define GDM_KEY_CHOOSER "daemon/Chooser=" LIBEXECDIR "/gdmchooser"
-#define GDM_KEY_AUTOMATIC_LOGIN_ENABLE "daemon/AutomaticLoginEnable=false"
-#define GDM_KEY_AUTOMATIC_LOGIN "daemon/AutomaticLogin="
-/* The SDTLOGIN feature is Solaris specific, and causes the Xserver to be
- * run with user permissionsinstead of as root, which adds security but
- * disables the AlwaysRestartServer option as highlighted in the gdm
- * documentation */
-#ifdef sun
-#define GDM_KEY_ALWAYS_RESTART_SERVER "daemon/AlwaysRestartServer=true"
-#else
-#define GDM_KEY_ALWAYS_RESTART_SERVER "daemon/AlwaysRestartServer=false"
-#endif
-#define GDM_KEY_GREETER "daemon/Greeter=" LIBEXECDIR "/gdmlogin"
-#define GDM_KEY_REMOTE_GREETER "daemon/RemoteGreeter=" LIBEXECDIR "/gdmlogin"
-#define GDM_KEY_ADD_GTK_MODULES "daemon/AddGtkModules=false"
-#define GDM_KEY_GTK_MODULES_LIST "daemon/GtkModulesList="
-#define GDM_KEY_GROUP "daemon/Group=gdm"
-#define GDM_KEY_HALT "daemon/HaltCommand=" HALT_COMMAND
-#define GDM_KEY_DISPLAY_INIT_DIR "daemon/DisplayInitDir=" GDMCONFDIR "/Init"
-#define GDM_KEY_KILL_INIT_CLIENTS "daemon/KillInitClients=true"
-#define GDM_KEY_LOG_DIR "daemon/LogDir=" LOGDIR
-#define GDM_KEY_PATH "daemon/DefaultPath=" GDM_USER_PATH
-#define GDM_KEY_PID_FILE "daemon/PidFile=/var/run/gdm.pid"
-#define GDM_KEY_POSTSESSION "daemon/PostSessionScriptDir=" GDMCONFDIR "/PostSession/"
-#define GDM_KEY_PRESESSION "daemon/PreSessionScriptDir=" GDMCONFDIR "/PreSession/"
-#define GDM_KEY_POSTLOGIN "daemon/PostLoginScriptDir=" GDMCONFDIR "/PreSession/"
-#define GDM_KEY_FAILSAFE_XSERVER "daemon/FailsafeXServer="
-#define GDM_KEY_X_KEEPS_CRASHING "daemon/XKeepsCrashing=" GDMCONFDIR "/XKeepsCrashing"
-#define GDM_KEY_REBOOT "daemon/RebootCommand=" REBOOT_COMMAND
-#define GDM_KEY_CUSTOM_CMD_TEMPLATE "customcommand/CustomCommand"
-#define GDM_KEY_CUSTOM_CMD_LABEL_TEMPLATE "customcommand/CustomCommandLabel"
-#define GDM_KEY_CUSTOM_CMD_LR_LABEL_TEMPLATE "customcommand/CustomCommandLRLabel"
-#define GDM_KEY_CUSTOM_CMD_TEXT_TEMPLATE "customcommand/CustomCommandText"
-#define GDM_KEY_CUSTOM_CMD_TOOLTIP_TEMPLATE "customcommand/CustomCommandTooltip"
-#define GDM_KEY_CUSTOM_CMD_NO_RESTART_TEMPLATE "customcommand/CustomCommandNoRestart"
-#define GDM_KEY_CUSTOM_CMD_IS_PERSISTENT_TEMPLATE "customcommand/CustomCommandIsPersistent"
-#define GDM_KEY_ROOT_PATH "daemon/RootPath=/sbin:/usr/sbin:" GDM_USER_PATH
-#define GDM_KEY_SERV_AUTHDIR "daemon/ServAuthDir=" AUTHDIR
-#define GDM_KEY_SESSION_DESKTOP_DIR "daemon/SessionDesktopDir=/etc/X11/sessions/:" DMCONFDIR "/Sessions/:" DATADIR "/gdm/BuiltInSessions/:" DATADIR "/xsessions/"
-#define GDM_KEY_BASE_XSESSION "daemon/BaseXsession=" GDMCONFDIR "/Xsession"
-#define GDM_KEY_DEFAULT_SESSION "daemon/DefaultSession=gnome.desktop"
-#define GDM_KEY_SUSPEND "daemon/SuspendCommand=" SUSPEND_COMMAND
-
-#define GDM_KEY_USER_AUTHDIR "daemon/UserAuthDir="
-#define GDM_KEY_USER_AUTHDIR_FALLBACK "daemon/UserAuthFBDir=/tmp"
-#define GDM_KEY_USER_AUTHFILE "daemon/UserAuthFile=.Xauthority"
-#define GDM_KEY_USER "daemon/User=gdm"
-#define GDM_KEY_CONSOLE_NOTIFY "daemon/ConsoleNotify=true"
-
-#define GDM_KEY_DOUBLE_LOGIN_WARNING "daemon/DoubleLoginWarning=true"
-#define GDM_KEY_ALWAYS_LOGIN_CURRENT_SESSION "daemon/AlwaysLoginCurrentSession=true"
-
-#define GDM_KEY_DISPLAY_LAST_LOGIN "daemon/DisplayLastLogin=false"
-
-#define GDM_KEY_TIMED_LOGIN_ENABLE "daemon/TimedLoginEnable=false"
-#define GDM_KEY_TIMED_LOGIN "daemon/TimedLogin="
-#define GDM_KEY_TIMED_LOGIN_DELAY "daemon/TimedLoginDelay=30"
-
-#define GDM_KEY_FLEXI_REAP_DELAY_MINUTES "daemon/FlexiReapDelayMinutes=5"
-
-#define GDM_KEY_STANDARD_XSERVER "daemon/StandardXServer=" X_SERVER
-#define GDM_KEY_FLEXIBLE_XSERVERS "daemon/FlexibleXServers=5"
-#define GDM_KEY_DYNAMIC_XSERVERS "daemon/DynamicXServers=false"
-#define GDM_KEY_XNEST "daemon/Xnest=" X_SERVER_PATH "/Xnest -name Xnest"
-/* Keys for automatic VT allocation rather then letting it up to the
- * X server */
-#define GDM_KEY_FIRST_VT "daemon/FirstVT=7"
-#define GDM_KEY_VT_ALLOCATION "daemon/VTAllocation=true"
-
-#define GDM_KEY_CONSOLE_CANNOT_HANDLE "daemon/ConsoleCannotHandle=am,ar,az,bn,el,fa,gu,hi,ja,ko,ml,mr,pa,ta,zh"
-
-/* How long to wait before assuming an Xserver has timed out */
-#define GDM_KEY_XSERVER_TIMEOUT "daemon/GdmXserverTimeout=10"
-
-/* Per server definitions */
-#define GDM_KEY_SERVER_PREFIX "server-"
-#define GDM_KEY_SERVER_NAME "name=Standard server"
-#define GDM_KEY_SERVER_COMMAND "command=" X_SERVER
-/* runnable as flexi server */
-#define GDM_KEY_SERVER_FLEXIBLE "flexible=true"
-/* choosable from the login screen */
-#define GDM_KEY_SERVER_CHOOSABLE "choosable=false"
-/* Login is handled by gdm, otherwise it's a remote server */
-#define GDM_KEY_SERVER_HANDLED "handled=true"
-/* Instead of the greeter run the chooser */
-#define GDM_KEY_SERVER_CHOOSER "chooser=false"
-/* select a nice level to run the X server at */
-#define GDM_KEY_SERVER_PRIORITY "priority=0"
-
-#define GDM_KEY_ALLOW_ROOT "security/AllowRoot=true"
-#define GDM_KEY_ALLOW_REMOTE_ROOT "security/AllowRemoteRoot=true"
-#define GDM_KEY_ALLOW_REMOTE_AUTOLOGIN "security/AllowRemoteAutoLogin=false"
-#define GDM_KEY_USER_MAX_FILE "security/UserMaxFile=65536"
-#define GDM_KEY_RELAX_PERM "security/RelaxPermissions=0"
-#define GDM_KEY_CHECK_DIR_OWNER "security/CheckDirOwner=true"
-#define GDM_KEY_SUPPORT_AUTOMOUNT "security/SupportAutomount=false"
-#define GDM_KEY_RETRY_DELAY "security/RetryDelay=1"
-#define GDM_KEY_DISALLOW_TCP "security/DisallowTCP=true"
-#define GDM_KEY_PAM_STACK "security/PamStack=gdm"
-
-#define GDM_KEY_NEVER_PLACE_COOKIES_ON_NFS "security/NeverPlaceCookiesOnNFS=true"
-#define GDM_KEY_PASSWORD_REQUIRED "security/PasswordRequired=false"
-
-#define GDM_KEY_XDMCP "xdmcp/Enable=false"
-#define GDM_KEY_MAX_PENDING "xdmcp/MaxPending=4"
-#define GDM_KEY_MAX_SESSIONS "xdmcp/MaxSessions=16"
-#define GDM_KEY_MAX_WAIT "xdmcp/MaxWait=15"
-#define GDM_KEY_DISPLAYS_PER_HOST "xdmcp/DisplaysPerHost=2"
-#define GDM_KEY_UDP_PORT "xdmcp/Port=177"
-#define GDM_KEY_INDIRECT "xdmcp/HonorIndirect=true"
-#define GDM_KEY_MAX_INDIRECT "xdmcp/MaxPendingIndirect=4"
-#define GDM_KEY_MAX_WAIT_INDIRECT "xdmcp/MaxWaitIndirect=15"
-#define GDM_KEY_PING_INTERVAL "xdmcp/PingIntervalSeconds=15"
-#define GDM_KEY_WILLING "xdmcp/Willing=" GDMCONFDIR "/Xwilling"
-
-#define GDM_KEY_XDMCP_PROXY "xdmcp/EnableProxy=false"
-#define GDM_KEY_XDMCP_PROXY_XSERVER "xdmcp/ProxyXServer="
-#define GDM_KEY_XDMCP_PROXY_RECONNECT "xdmcp/ProxyReconnect="
-
-#define GDM_KEY_GTK_THEME "gui/GtkTheme=Default"
-#define GDM_KEY_GTKRC "gui/GtkRC=" DATADIR "/themes/Default/gtk-2.0/gtkrc"
-#define GDM_KEY_MAX_ICON_WIDTH "gui/MaxIconWidth=128"
-#define GDM_KEY_MAX_ICON_HEIGHT "gui/MaxIconHeight=128"
-
-#define GDM_KEY_ALLOW_GTK_THEME_CHANGE "gui/AllowGtkThemeChange=true"
-#define GDM_KEY_GTK_THEMES_TO_ALLOW "gui/GtkThemesToAllow=all"
-
-#define GDM_KEY_BROWSER "greeter/Browser=false"
-#define GDM_KEY_INCLUDE "greeter/Include="
-#define GDM_KEY_EXCLUDE "greeter/Exclude=bin,daemon,adm,lp,sync,shutdown,halt,mail,news,uucp,operator,nobody,gdm,postgres,pvm,rpm,nfsnobody,pcap"
-#define GDM_KEY_INCLUDE_ALL "greeter/IncludeAll=false"
-#define GDM_KEY_MINIMAL_UID "greeter/MinimalUID=100"
-#define GDM_KEY_DEFAULT_FACE "greeter/DefaultFace=" PIXMAPDIR "/nobody.png"
-#define GDM_KEY_GLOBAL_FACE_DIR "greeter/GlobalFaceDir=" DATADIR "/pixmaps/faces/"
-#define GDM_KEY_LOCALE_FILE "greeter/LocaleFile=" GDMLOCALEDIR "/locale.alias"
-#define GDM_KEY_LOGO "greeter/Logo=" PIXMAPDIR "/gdm-foot-logo.png"
-#define GDM_KEY_CHOOSER_BUTTON_LOGO "greeter/ChooserButtonLogo=" PIXMAPDIR "/gdm-foot-logo.png"
-#define GDM_KEY_QUIVER "greeter/Quiver=true"
-#define GDM_KEY_SYSTEM_MENU "greeter/SystemMenu=true"
-#define GDM_KEY_CONFIGURATOR "daemon/Configurator=" SBINDIR "/gdmsetup --disable-sound --disable-crash-dialog"
-#define GDM_KEY_CONFIG_AVAILABLE "greeter/ConfigAvailable=true"
-#define GDM_KEY_CHOOSER_BUTTON "greeter/ChooserButton=true"
-#define GDM_KEY_TITLE_BAR "greeter/TitleBar=true"
-
-/*
- * For backwards compatibility, do not set values for DEFAULT_WELCOME or
- * DEFAULT_REMOTEWELCOME. This will cause these values to always be
- * read from the config file, and will cause them to return FALSE if
- * no value is set in the config file. We want the value "FALSE" if
- * the values don't exist in the config file. The daemon will compare
- * the Welcome/RemoveWelcome value with the default string and
- * automatically translate the text if the string is the same as the
- * default string. We set the default values of GDM_KEY_WELCOME and
- * GDM_KEY_REMOTEWELCOME so that the default value is returned when
- * you run GET_CONFIG on these keys.
- */
-#define GDM_DEFAULT_WELCOME_MSG "Welcome"
-#define GDM_DEFAULT_REMOTE_WELCOME_MSG "Welcome to %n"
-
-#define GDM_KEY_DEFAULT_WELCOME "greeter/DefaultWelcome="
-#define GDM_KEY_DEFAULT_REMOTE_WELCOME "greeter/DefaultRemoteWelcome="
-#define GDM_KEY_WELCOME "greeter/Welcome=" GDM_DEFAULT_WELCOME_MSG
-#define GDM_KEY_REMOTE_WELCOME "greeter/RemoteWelcome=" GDM_DEFAULT_REMOTE_WELCOME_MSG
-#define GDM_KEY_XINERAMA_SCREEN "greeter/XineramaScreen=0"
-#define GDM_KEY_BACKGROUND_PROGRAM "greeter/BackgroundProgram="
-#define GDM_KEY_RUN_BACKGROUND_PROGRAM_ALWAYS "greeter/RunBackgroundProgramAlways=false"
-#define GDM_KEY_BACKGROUND_PROGRAM_INITIAL_DELAY "greeter/BackgroundProgramInitialDelay=30"
-#define GDM_KEY_RESTART_BACKGROUND_PROGRAM "greeter/RestartBackgroundProgram=true"
-#define GDM_KEY_BACKGROUND_PROGRAM_RESTART_DELAY "greeter/BackgroundProgramRestartDelay=30"
-#define GDM_KEY_BACKGROUND_IMAGE "greeter/BackgroundImage="
-#define GDM_KEY_BACKGROUND_COLOR "greeter/BackgroundColor=#76848F"
-#define GDM_KEY_BACKGROUND_TYPE "greeter/BackgroundType=2"
-#define GDM_KEY_BACKGROUND_SCALE_TO_FIT "greeter/BackgroundScaleToFit=true"
-#define GDM_KEY_BACKGROUND_REMOTE_ONLY_COLOR "greeter/BackgroundRemoteOnlyColor=true"
-#define GDM_KEY_LOCK_POSITION "greeter/LockPosition=false"
-#define GDM_KEY_SET_POSITION "greeter/SetPosition=false"
-#define GDM_KEY_POSITION_X "greeter/PositionX=0"
-#define GDM_KEY_POSITION_Y "greeter/PositionY=0"
-#define GDM_KEY_USE_24_CLOCK "greeter/Use24Clock=auto"
-#define GDM_KEY_ENTRY_CIRCLES "greeter/UseCirclesInEntry=false"
-#define GDM_KEY_ENTRY_INVISIBLE "greeter/UseInvisibleInEntry=false"
-#define GDM_KEY_GRAPHICAL_THEME "greeter/GraphicalTheme=circles"
-#define GDM_KEY_GRAPHICAL_THEMES "greeter/GraphicalThemes=circles"
-#define GDM_KEY_GRAPHICAL_THEME_RAND "greeter/GraphicalThemeRand=false"
-#define GDM_KEY_GRAPHICAL_THEME_DIR "greeter/GraphicalThemeDir=" DATADIR "/gdm/themes/"
-#define GDM_KEY_GRAPHICAL_THEMED_COLOR "greeter/GraphicalThemedColor=#76848F"
-
-#define GDM_KEY_INFO_MSG_FILE "greeter/InfoMsgFile="
-#define GDM_KEY_INFO_MSG_FONT "greeter/InfoMsgFont="
-
-#define GDM_KEY_PRE_FETCH_PROGRAM "greeter/PreFetchProgram="
-
-#define GDM_KEY_SOUND_ON_LOGIN "greeter/SoundOnLogin=true"
-#define GDM_KEY_SOUND_ON_LOGIN_SUCCESS "greeter/SoundOnLoginSuccess=false"
-#define GDM_KEY_SOUND_ON_LOGIN_FAILURE "greeter/SoundOnLoginFailure=false"
-#define GDM_KEY_SOUND_ON_LOGIN_FILE "greeter/SoundOnLoginFile="
-#define GDM_KEY_SOUND_ON_LOGIN_SUCCESS_FILE "greeter/SoundOnLoginSuccessFile="
-#define GDM_KEY_SOUND_ON_LOGIN_FAILURE_FILE "greeter/SoundOnLoginFailureFile="
-#define GDM_KEY_SOUND_PROGRAM "daemon/SoundProgram=" SOUND_PROGRAM
-
-#define GDM_KEY_SCAN_TIME "chooser/ScanTime=4"
-#define GDM_KEY_DEFAULT_HOST_IMG "chooser/DefaultHostImg=" PIXMAPDIR "/nohost.png"
-#define GDM_KEY_HOST_IMAGE_DIR "chooser/HostImageDir=" DATADIR "/hosts/"
-#define GDM_KEY_HOSTS "chooser/Hosts="
-#define GDM_KEY_MULTICAST "chooser/Multicast=true"
-#define GDM_KEY_MULTICAST_ADDR "chooser/MulticastAddr=ff02::1"
-#define GDM_KEY_BROADCAST "chooser/Broadcast=true"
-#define GDM_KEY_ALLOW_ADD "chooser/AllowAdd=true"
-
-#define GDM_KEY_DEBUG "debug/Enable=false"
-#define GDM_KEY_DEBUG_GESTURES "debug/Gestures=false"
-
-#define GDM_KEY_SECTION_GREETER "greeter"
-#define GDM_KEY_SECTION_SERVERS "servers"
-
-#define GDM_KEY_SHOW_GNOME_FAILSAFE "greeter/ShowGnomeFailsafeSession=true"
-#define GDM_KEY_SHOW_XTERM_FAILSAFE "greeter/ShowXtermFailsafeSession=true"
-#define GDM_KEY_SHOW_LAST_SESSION "greeter/ShowLastSession=true"
-
-#define GDM_SESSION_FAILSAFE_GNOME "GDM_Failsafe.GNOME"
-#define GDM_SESSION_FAILSAFE_XTERM "GDM_Failsafe.XTERM"
-
-/* FIXME: will support these builtin types later */
-#define GDM_SESSION_DEFAULT "default"
-#define GDM_SESSION_CUSTOM "custom"
-#define GDM_SESSION_FAILSAFE "failsafe"
-
-#define GDM_STANDARD "Standard"
-
-#define GDM_RESPONSE_CANCEL "GDM_RESPONSE_CANCEL"
-
-#ifndef TYPEDEF_GDM_CONNECTION
-#define TYPEDEF_GDM_CONNECTION
-typedef struct _GdmConnection GdmConnection;
-#endif /* TYPEDEF_GDM_CONNECTION */
-
-#ifndef TYPEDEF_GDM_CUSTOM_CMD
-#define TYPEDEF_GDM_CUSTOM_CMD
-typedef struct _GdmCustomCmd GdmCustomCmd;
-#endif /* TYPEDEF_GDM_CUSTOM_CMD */
-struct _GdmCustomCmd {
- gchar *command; /* command(s) to execute */
- gchar *command_label; /* button/menu item label */
- gchar *command_lr_label; /* radio button/list item label */
- gchar *command_text; /* warning dialog text */
- gchar *command_tooltip; /* tooltip string */
- gboolean command_no_restart; /* no restart flag */
- gboolean command_is_persistent; /* persistence flag */
-};
-
-#define GDM_CUSTOM_COMMAND_MAX 10 /* maximum number of supported custom commands */
-
-/* Values between GDM_LOGOUT_ACTION_CUSTOM_CMD_FIRST and
- GDM_LOGOUT_ACTION_CUSTOM_CMD_LAST are reserved and should not be used */
-typedef enum {
- GDM_LOGOUT_ACTION_NONE = 0,
- GDM_LOGOUT_ACTION_HALT,
- GDM_LOGOUT_ACTION_REBOOT,
- GDM_LOGOUT_ACTION_SUSPEND,
- GDM_LOGOUT_ACTION_CUSTOM_CMD_FIRST,
- GDM_LOGOUT_ACTION_CUSTOM_CMD_LAST = GDM_LOGOUT_ACTION_CUSTOM_CMD_FIRST + GDM_CUSTOM_COMMAND_MAX - 1,
- GDM_LOGOUT_ACTION_LAST
-} GdmLogoutAction;
-
-#ifndef TYPEDEF_GDM_DISPLAY
-#define TYPEDEF_GDM_DISPLAY
-typedef struct _GdmDisplay GdmDisplay;
-#endif /* TYPEDEF_GDM_DISPLAY */
-
-/* Use this to get the right authfile name */
-#define GDM_AUTHFILE(display) \
- (display->authfile_gdm != NULL ? display->authfile_gdm : display->authfile)
-
-#ifdef sun
-#define SDTLOGIN_DIR "/var/dt/sdtlogin"
-#endif
-
-struct _GdmDisplay {
- CARD32 sessionid;
- Display *dsp;
- gchar *authfile; /* authfile for the server */
- gchar *authfile_gdm; /* authfile readable by gdm user
- if necessary */
- GSList *auths;
- GSList *local_auths;
- gchar *userauth;
- gboolean authfb;
- time_t last_auth_touch;
- gchar *command;
- gboolean failsafe_xserver;
- gboolean use_chooser; /* run chooser instead of greeter */
- gchar *chosen_hostname; /* locally chosen hostname if not NULL,
- "-query chosen_hostname" is appened to server command line */
- guint indirect_id;
- gchar *cookie;
- gchar *bcookie;
- gchar *name;
- gchar *hostname;
- struct in_addr addr;
-#ifdef ENABLE_IPV6
- struct in6_addr addr6;
- struct sockaddr_storage *addrs; /* array of addresses */
-#else
- struct in_addr *addrs; /* array of addresses */
-#endif
- int addrtype; /* Specifying the variable used, addr or addr6 */
- int addr_count; /* number of addresses in array */
- /* Note that the above may in fact be empty even though
- addr is set, these are just extra addresses
- (it could also contain addr for all we know) */
-
- guint8 dispstat;
- guint16 dispnum;
- gboolean removeconf;
- guint8 servstat;
- time_t starttime;
- time_t managetime;
- guint8 type;
- pid_t greetpid;
- pid_t servpid;
- pid_t sesspid;
- int last_sess_status; /* status returned by last session */
- pid_t slavepid;
- pid_t chooserpid;
- time_t acctime;
-
- gboolean handled;
- gboolean tcp_disallowed;
-
- int priority;
- int vt;
-
- gboolean busy_display;
-
- gboolean attached; /* Display is physically attached to the machine. */
- /* TYPE_XDMCP would have this FALSE, eg. */
-
- time_t last_start_time;
- time_t last_loop_start_time;
- gint retry_count;
-
- int sleep_before_run;
-
- time_t last_x_failed;
- int x_faileds;
-
- gboolean try_different_greeter;
-
- gboolean logged_in; /* TRUE if someone is logged in */
- char *login;
-
- char *preset_user;
-
- gboolean timed_login_ok;
-
- int screenx;
- int screeny;
- int screenwidth; /* Note 0 means use the gdk size */
- int screenheight;
- int lrh_offsetx; /* lower right hand corner x offset */
- int lrh_offsety; /* lower right hand corner y offset */
-
- /* Flexi stuff */
- char *parent_disp;
- Display *parent_dsp;
- char *parent_auth_file;
- char *parent_temp_auth_file;
- uid_t server_uid;
- GdmConnection *socket_conn;
-
- int xdmcp_dispnum;
-
- /* Notification connection */
- int master_notify_fd; /* write part of the connection */
- int slave_notify_fd; /* read part of the connection */
-
- /* order in the Xservers file for sessreg, -1 if unset yet */
- int x_servers_order;
-
- /* The xsession-errors connection */
- int xsession_errors_fd; /* write to the file */
- int session_output_fd; /* read from the session */
- int xsession_errors_bytes;
-#define MAX_XSESSION_ERRORS_BYTES (80*2500) /* maximum number of bytes in
- the ~/.xsession-errors file */
- char *xsession_errors_filename; /* if NULL then there is no .xsession-errors
- file */
-
- int chooser_output_fd; /* from the chooser */
- char *chooser_last_line;
-
- /* Only set in the main daemon as that's the only place that cares */
- GdmLogoutAction logout_action;
-
- char *theme_name;
-};
-
-typedef struct _GdmXserver GdmXserver;
-struct _GdmXserver {
- char *id;
- char *name;
- char *command;
- gboolean flexible;
- gboolean choosable; /* not implemented yet */
- gboolean chooser; /* instead of greeter, run chooser */
- gboolean handled;
- int priority;
-};
-
-typedef struct _GdmIndirectDisplay GdmIndirectDisplay;
-struct _GdmIndirectDisplay {
- int id;
-#ifdef ENABLE_IPV6
- struct sockaddr_storage* dsp_sa;
- struct in6_addr* chosen_host6;
-#else
- struct sockaddr_in* dsp_sa;
-#endif
- time_t acctime;
- struct in_addr *chosen_host;
-};
-
-/* NOTE: Timeout and max are hardcoded */
-typedef struct _GdmForwardQuery GdmForwardQuery;
-struct _GdmForwardQuery {
- time_t acctime;
-#ifdef ENABLE_IPV6
- struct sockaddr_storage* dsp_sa;
- struct sockaddr_storage* from_sa;
-#else
- struct sockaddr_in* dsp_sa;
- struct sockaddr_in* from_sa;
-#endif
-};
-#define GDM_MAX_FORWARD_QUERIES 10
-#define GDM_FORWARD_QUERY_TIMEOUT 30
-
-/* some extra XDMCP opcodes that xdm will happily ignore since they'll be
- * the wrong XDMCP version anyway */
-#define GDM_XDMCP_PROTOCOL_VERSION 1001
-enum {
- GDM_XDMCP_FIRST_OPCODE = 1000, /*just a marker, not an opcode */
-
- GDM_XDMCP_MANAGED_FORWARD = 1000,
- /* manager (master) -> manager
- * A packet with MANAGED_FORWARD is sent to the
- * manager that sent the forward query from the manager to
- * which forward query was sent. It indicates that the forward
- * was fully processed and that the client now has either
- * a managed session, or has been sent denial, refuse or failed.
- * (if the denial gets lost then client gets dumped into the
- * chooser again). This should be resent a few times
- * until some (short) timeout or until GOT_MANAGED_FORWARD
- * is sent. GDM sends at most 3 packates with 1.5 seconds
- * between each.
- *
- * Argument is ARRAY8 with the address of the originating host */
- GDM_XDMCP_GOT_MANAGED_FORWARD,
- /* manager -> manager (master)
- * A single packet with GOT_MANAGED_FORWARD is sent to indicate
- * that we did receive the MANAGED_FORWARD packet. The argument
- * must match the MANAGED_FORWARD one or it will just be ignored.
- *
- * Argument is ARRAY8 with the address of the originating host */
- GDM_XDMCP_LAST_OPCODE /*just a marker, not an opcode */
-};
-
-/* If id == NULL, then get the first X server */
-void gdm_final_cleanup (void);
-
-
-/* primitive protocol for controlling the daemon from slave
- * or gdmconfig or whatnot */
-
-/* The ones that pass a <slave pid> must be from a valid slave, and
- * the slave will be sent a SIGUSR2. Nowdays there is a pipe that is
- * used from inside slaves, so those messages may stop being processed
- * by the fifo at some point perhaps. */
-/* The fifo protocol, used only by gdm internally */
-#define GDM_SOP_CHOSEN "CHOSEN" /* <indirect id> <ip addr> */
-#define GDM_SOP_CHOSEN_LOCAL "CHOSEN_LOCAL" /* <slave pid> <hostname> */
-#define GDM_SOP_XPID "XPID" /* <slave pid> <xpid> */
-#define GDM_SOP_SESSPID "SESSPID" /* <slave pid> <sesspid> */
-#define GDM_SOP_GREETPID "GREETPID" /* <slave pid> <greetpid> */
-#define GDM_SOP_CHOOSERPID "CHOOSERPID" /* <slave pid> <chooserpid> */
-#define GDM_SOP_LOGGED_IN "LOGGED_IN" /* <slave pid> <logged_in as int> */
-#define GDM_SOP_LOGIN "LOGIN" /* <slave pid> <username> */
-#define GDM_SOP_COOKIE "COOKIE" /* <slave pid> <cookie> */
-#define GDM_SOP_AUTHFILE "AUTHFILE" /* <slave pid> <authfile> */
-#define GDM_SOP_QUERYLOGIN "QUERYLOGIN" /* <slave pid> <username> */
-/* if user already logged in somewhere, the ack response will be
- <display>,<migratable>,<display>,<migratable>,... */
-#define GDM_SOP_MIGRATE "MIGRATE" /* <slave pid> <display> */
-#define GDM_SOP_DISP_NUM "DISP_NUM" /* <slave pid> <display as int> */
-/* For Linux only currently */
-#define GDM_SOP_VT_NUM "VT_NUM" /* <slave pid> <vt as int> */
-#define GDM_SOP_FLEXI_ERR "FLEXI_ERR" /* <slave pid> <error num> */
- /* 3 = X failed */
- /* 4 = X too busy */
- /* 5 = Xnest can't connect */
-#define GDM_SOP_FLEXI_OK "FLEXI_OK" /* <slave pid> */
-#define GDM_SOP_SOFT_RESTART "SOFT_RESTART" /* no arguments */
-#define GDM_SOP_START_NEXT_LOCAL "START_NEXT_LOCAL" /* no arguments */
-#define GDM_SOP_HUP_ALL_GREETERS "HUP_ALL_GREETERS" /* no arguments */
-
-/* stop waiting for this and go on with your life, useful with
- the --wait-for-go command line option */
-#define GDM_SOP_GO "GO" /* no arguments */
-
-/* sometimes we can't do a syslog so we tell the main daemon */
-#define GDM_SOP_SYSLOG "SYSLOG" /* <pid> <type> <message> */
-
-/* write out a sessreg (xdm) compatible Xservers file
- * in the ServAuthDir as <name>.Xservers */
-#define GDM_SOP_WRITE_X_SERVERS "WRITE_X_SERVERS" /* <slave pid> */
-
-/* All X servers should be restarted rather then regenerated. Useful
- * if you have updated the X configuration. Note that this happens
- * only when the user logs out or when we otherwise would have restarted
- * a server, nothing is done by this command. */
-#define GDM_SOP_DIRTY_SERVERS "DIRTY_SERVERS" /* no arguments */
-
-/* restart all servers that people aren't logged in on. Maybe you may not
- * want to do this on every change of X server config since this may cause
- * flicker on screen and jumping around on the vt. Perhaps useful to do
- * by asking the user if they want to do that. Note that this will not
- * kill any logged in sessions. */
-#define GDM_SOP_SOFT_RESTART_SERVERS "SOFT_RESTART_SERVERS" /* no arguments */
-/* Suspend the machine if it is even allowed */
-#define GDM_SOP_SUSPEND_MACHINE "SUSPEND_MACHINE" /* no arguments */
-#define GDM_SOP_CHOSEN_THEME "CHOSEN_THEME" /* <slave pid> <theme name> */
-
-/*Execute custom cmd*/
-#define GDM_SOP_CUSTOM_CMD "CUSTOM_CMD" /* <slave pid> <cmd id> */
-
-/* Start a new standard X flexible server */
-#define GDM_SOP_FLEXI_XSERVER "FLEXI_XSERVER" /* no arguments */
-
-#define GDM_SOP_SHOW_ERROR_DIALOG "SHOW_ERROR_DIALOG" /* show the error dialog from daemon */
-#define GDM_SOP_SHOW_YESNO_DIALOG "SHOW_YESNO_DIALOG" /* show the yesno dialog from daemon */
-#define GDM_SOP_SHOW_QUESTION_DIALOG "SHOW_QUESTION_DIALOG" /* show the question dialog from daemon */
-#define GDM_SOP_SHOW_ASKBUTTONS_DIALOG "SHOW_ASKBUTTON_DIALOG" /* show the askbutton dialog from daemon */
-
-/* Notification protocol */
-/* keys */
-#define GDM_NOTIFY_ALLOW_REMOTE_ROOT "AllowRemoteRoot" /* <true/false as int> */
-#define GDM_NOTIFY_ALLOW_ROOT "AllowRoot" /* <true/false as int> */
-#define GDM_NOTIFY_ALLOW_REMOTE_AUTOLOGIN "AllowRemoteAutoLogin" /* <true/false as int> */
-#define GDM_NOTIFY_SYSTEM_MENU "SystemMenu" /* <true/false as int> */
-#define GDM_NOTIFY_CONFIG_AVAILABLE "ConfigAvailable" /* <true/false as int> */
-#define GDM_NOTIFY_CHOOSER_BUTTON "ChooserButton" /* <true/false as int> */
-#define GDM_NOTIFY_RETRY_DELAY "RetryDelay" /* <seconds> */
-#define GDM_NOTIFY_GREETER "Greeter" /* <greeter binary> */
-#define GDM_NOTIFY_REMOTE_GREETER "RemoteGreeter" /* <greeter binary> */
-#define GDM_NOTIFY_TIMED_LOGIN "TimedLogin" /* <login> */
-#define GDM_NOTIFY_TIMED_LOGIN_DELAY "TimedLoginDelay" /* <seconds> */
-#define GDM_NOTIFY_TIMED_LOGIN_ENABLE "TimedLoginEnable" /* <true/false as int> */
-#define GDM_NOTIFY_DISALLOW_TCP "DisallowTCP" /* <true/false as int> */
-#define GDM_NOTIFY_SOUND_ON_LOGIN_FILE "SoundOnLoginFile" /* <sound file> */
-#define GDM_NOTIFY_SOUND_ON_LOGIN_SUCCESS_FILE "SoundOnLoginSuccessFile" /* <sound file> */
-#define GDM_NOTIFY_SOUND_ON_LOGIN_FAILURE_FILE "SoundOnLoginFailureFile" /* <sound file> */
-#define GDM_NOTIFY_ADD_GTK_MODULES "AddGtkModules" /* <true/false as int> */
-#define GDM_NOTIFY_GTK_MODULES_LIST "GtkModulesList" /* <modules list> */
-#define GDM_NOTIFY_CUSTOM_CMD_TEMPLATE "CustomCommand" /* <custom command path> */
-
-/* commands, seel GDM_SLAVE_NOTIFY_COMMAND */
-#define GDM_NOTIFY_DIRTY_SERVERS "DIRTY_SERVERS"
-#define GDM_NOTIFY_SOFT_RESTART_SERVERS "SOFT_RESTART_SERVERS"
-#define GDM_NOTIFY_GO "GO"
-#define GDM_NOTIFY_TWIDDLE_POINTER "TWIDDLE_POINTER"
-
-/* Ack for a slave message */
-/* Note that an extra response can follow an 'ack' */
-#define GDM_SLAVE_NOTIFY_ACK 'A'
-/* Update this key */
-#define GDM_SLAVE_NOTIFY_KEY '!'
-/* notify a command */
-#define GDM_SLAVE_NOTIFY_COMMAND '#'
-/* send the response */
-#define GDM_SLAVE_NOTIFY_RESPONSE 'R'
-/* send the error dialog response */
-#define GDM_SLAVE_NOTIFY_ERROR_RESPONSE 'E'
-/* send the yesno dialog response */
-#define GDM_SLAVE_NOTIFY_YESNO_RESPONSE 'Y'
-/* send the askbuttons dialog response */
-#define GDM_SLAVE_NOTIFY_ASKBUTTONS_RESPONSE 'B'
-/* send the question dialog response */
-#define GDM_SLAVE_NOTIFY_QUESTION_RESPONSE 'Q'
-
-/*
- * Maximum number of messages allowed over the sockets protocol. This
- * is set to 80 since the gdmlogin/gdmgreeter programs have ~60 config
- * values that are pulled over the socket connection so it allows them
- * all to be grabbed in one pull.
- */
-#define GDM_SUP_MAX_MESSAGES 80
-#define GDM_SUP_SOCKET "/tmp/.gdm_socket"
-
-/*
- * The user socket protocol. Each command is given on a separate line
- *
- * A user should first send a VERSION\n after connecting and only do
- * anything else if gdm responds with the correct response. The version
- * is the gdm version and not a "protocol" revision, so you can't check
- * against a single version but check if the version is higher then some
- * value.
- *
- * You can only send a few commands at a time, so if you keep getting error
- * 200 try opening a new socket for every command you send.
- */
-/* The user protocol, using /tmp/.gdm_socket */
-
-#define GDM_SUP_VERSION "VERSION" /* no arguments */
-/* VERSION: Query GDM version
- * Supported since: 2.2.4.0
- * Arguments: None
- * Answers:
- * GDM <gdm version>
- * ERROR <err number> <english error description>
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_AUTH_LOCAL "AUTH_LOCAL" /* <xauth cookie> */
-/* AUTH_LOCAL: Setup this connection as authenticated for FLEXI_SERVER.
- * Because all full blown (non-Xnest) displays can be started
- * only from users logged in locally, and here gdm assumes
- * only users logged in from gdm. They must pass the xauth
- * MIT-MAGIC-COOKIE-1 that they were passed before the
- * connection is authenticated.
- * Note: The AUTH LOCAL command requires the --authenticate option,
- * although only FLEXI XSERVER uses this currently.
- * Note: Since 2.6.0.6 you can also use a global
- * <ServAuthDir>/.cookie, which works for all authentication
- * except for SET_LOGOUT_ACTION and QUERY_LOGOUT_ACTION
- * and SET_SAFE_LOGOUT_ACTION which require a logged in
- * display.
- * Supported since: 2.2.4.0
- * Arguments: <xauth cookie>
- * <xauth cookie> is in hex form with no 0x prefix
- * Answers:
- * OK
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 100 = Not authenticated
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_FLEXI_XSERVER "FLEXI_XSERVER" /* <xserver type> */
-/* FLEXI_XSERVER: Start a new X flexible display. Only supported on
- * connection that passed AUTH_LOCAL
- * Supported since: 2.2.4.0
- * Arguments: <xserver type>
- * If no arguments, starts the standard X server
- * Answers:
- * OK <display>
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 1 = No more flexi servers
- * 2 = Startup errors
- * 3 = X failed
- * 4 = X too busy
- * 6 = No server binary
- * 100 = Not authenticated
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_FLEXI_XSERVER_USER "FLEXI_XSERVER_USER" /* <username> <xserver type> */
-/* FLEXI_XSERVER_USER: Start a new X flexible display and initialize the
- * greeter with the given username. Only supported on
- * connection that passed AUTH_LOCAL
- * Supported since: 2.17.7
- * Arguments: <username> <xserver type>
- * If no server type specified, starts the standard X server
- * Answers:
- * OK <display>
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 1 = No more flexi servers
- * 2 = Startup errors
- * 3 = X failed
- * 4 = X too busy
- * 6 = No server binary
- * 100 = Not authenticated
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_FLEXI_XNEST "FLEXI_XNEST" /* <display> <uid> <xauth cookie> <xauth file> */
-/* FLEXI_XNEXT: Start a new flexible Xnest display.
- * Note: Supported on older versions from 2.2.4.0, later
- * 2.2.4.2, but since 2.3.90.4 you must supply 4
- * arguments or ERROR 100 will be returned. This
- * will start Xnest using the XAUTHORITY file
- * supplied and as the uid same as the owner of
- * that file (and same as you supply). You must
- * also supply the cookie as the third argument
- * for this display, to prove that you indeed are
- * this user. Also this file must be readable
- * ONLY by this user, that is have a mode of 0600.
- * If this all is not met, ERROR 100 is returned.
- * Note: The cookie should be the MIT-MAGIC-COOKIE-1,
- * the first one gdm can find in the XAUTHORITY
- * file for this display. If that's not what you
- * use you should generate one first. The cookie
- * should be in hex form.
- * Supported since: 2.3.90.4
- * Arguments: <display to run on> <uid of requesting user>
- * <xauth cookie for the display> <xauth file>
- * Answers:
- * OK <display>
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 1 = No more flexi servers
- * 2 = Startup errors
- * 3 = X failed
- * 4 = X too busy
- * 5 = Xnest can't connect
- * 6 = No server binary
- * 100 = Not authenticated
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_FLEXI_XNEST_USER "FLEXI_XNEST_USER" /* <username> <display> <uid> <xauth cookie> <xauth file> */
-/* FLEXI_XNEXT_USER: Start a new flexible Xnest display and
- * initialize the greeter with the given username
- * Note: The cookie should be the MIT-MAGIC-COOKIE-1,
- * the first one gdm can find in the XAUTHORITY
- * file for this display. If that's not what you
- * use you should generate one first. The cookie
- * should be in hex form.
- * Supported since: 2.17.7
- * Arguments: <username> <display to run on> <uid of requesting user>
- * <xauth cookie for the display> <xauth file>
- * Answers:
- * OK <display>
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 1 = No more flexi servers
- * 2 = Startup errors
- * 3 = X failed
- * 4 = X too busy
- * 5 = Xnest can't connect
- * 6 = No server binary
- * 100 = Not authenticated
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_ADD_DYNAMIC_DISPLAY "ADD_DYNAMIC_DISPLAY"
-/*
- * ADD_DYNAMIC_DISPLAY: Create a new server definition that will
- * run on the specified display leaving it
- * in DISPLAY_CONFIG state.
- * Supported since: 2.8.0.0
- * Arguments: <display to run on>=<server>
- * Where <server> is either a configuration named in the
- * GDM configuration a literal command name.
- * Answers:
- * OK
- * ERROR
- * 0 = Not implemented
- * 2 = Existing display
- * 3 = No server string
- * 4 = Display startup failure
- * 100 = Not authenticated
- * 200 - Dynamic Displays not allowed
- * 999 = Unknown error
- */
-#define GDM_SUP_RELEASE_DYNAMIC_DISPLAYS "RELEASE_DYNAMIC_DISPLAYS"
-/*
- * RELEASE_DYNAMIC_DISPLAYS: Release and begin managing dynamic displays
- * currently in DISPLAY_CONFIG state
- * Supported since: 2.8.0.0
- * Arguments: <display to release>
- * Answers:
- * OK
- * ERROR
- * 0 = Not implemented
- * 1 = Bad display number
- * 100 = Not authenticated
- * 200 = Dynamic Displays not allowed
- * 999 = Unknown error
- */
-#define GDM_SUP_REMOVE_DYNAMIC_DISPLAY "REMOVE_DYNAMIC_DISPLAY"
-/*
- * REMOVE_DYNAMIC_DISPLAY: Remove a dynamic display, killing the server
- * and purging the display configuration
- * Supported since: 2.8.0.0
- * Arguments: <display to remove>
- * Answers:
- * OK
- * ERROR
- * 0 = Not implemented
- * 1 = Bad display number
- * 100 = Not authenticated
- * 200 = Dynamic Displays not allowed
- * 999 = Unknown error
- */
-#define GDM_SUP_ATTACHED_SERVERS "ATTACHED_SERVERS" /* None */
-#define GDM_SUP_CONSOLE_SERVERS "CONSOLE_SERVERS" /* None */
-/* ATTACHED_SERVERS: List all attached displays. Doesn't list XDMCP
- * and xnest non-attached displays.
- * Note: This command used to be named CONSOLE_SERVERS,
- * which is still recognized for backwards
- * compatibility. The optional pattern argument
- * is supported as of version 2.8.0.0.
- * Supported since: 2.2.4.0
- * Arguments: <pattern> (optional)
- * With no argument, all dynamic displays are returned. The optional
- * <pattern> is a string that may contain glob characters '*', '?', and
- * '[]'. Only displays that match the pattern will be returned.
- * Answers:
- * OK <server>;<server>;...
- *
- * <server> is <display>,<logged in user>,<vt or xnest display>
- *
- * <logged in user> can be empty in case no one logged in yet,
- * and <vt> can be -1 if it's not known or not supported (on non-Linux
- * for example). If the display is an xnest display and is an attached one
- * (that is, it is an xnest inside another attached display) it is listed
- * and instead of vt, it lists the parent display in standard form.
- *
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_ALL_SERVERS "ALL_SERVERS" /* None */
-/* ALL_SERVERS: List all displays, including attached, remote, xnest.
- * This can for example be useful to figure out if
- * the display you are on is managed by the gdm daemon,
- * by seeing if it is in the list. It is also somewhat
- * like the 'w' command but for graphical sessions.
- * Supported since: 2.4.2.96
- * Arguments: None
- * Answers:
- * OK <server>;<server>;...
- *
- * <server> is <display>,<logged in user>
- *
- * <logged in user> can be empty in case no one logged in yet
- *
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_GET_SERVER_LIST "GET_SERVER_LIST" /* None */
-/* GET_SERVER_LIST: Get a list of the server sections from
- * the configuration file.
- * Supported since: 2.13.0.4
- * Arguments: None
- * Answers:
- * OK <value>;<value>;...
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 1 = No servers found
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_GET_SERVER_DETAILS "GET_SERVER_DETAILS" /* <server> <key> */
-/* GET_SERVER_DETAILS: Get detail information for a specific server.
- * Supported since: 2.13.0.4
- * Arguments: <server> <key>
- * Key values include:
- * ID - Returns the server id
- * NAME - Returns the server name
- * COMMAND - Returns the server command
- * FLEXIBLE - Returns "true" if flexible, "false" otherwise
- * CHOOSABLE - Returns "true" if choosable, "false" otherwise
- * HANDLED - Returns "true" if handled, "false" otherwise
- * CHOOSER - Returns "true" if chooser, "false" otherwise
- * PRIORITY - Returns process priority
- * Answers:
- * OK <value>
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 1 = Server not found
- * 2 = Key not valid
- * 50 = Unsupported key
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_GET_CONFIG "GET_CONFIG" /* <key> */
-/* GET_CONFIG: Get configuration value for key. Useful so
- * that other applications can request configuration
- * information from GDM. Any key defined as GDM_KEY_*
- * in gdm.h is supported. Starting with version 2.13.0.2
- * translated keys (such as "greeter/GdmWelcome[cs]" are
- * supported via GET_CONFIG. Also starting with version
- * 2.13.0.2 it is no longer necessary to include the
- * default value (i.e. you can use key "greeter/IncludeAll"
- * instead of having to use "greeter/IncludeAll=false".
- * Starting with version 2.14.4, GDM supports per-display
- * configuration (for GUI slave clients only) and accepts
- * the display argument to retrieve per-display value (if
- * any.
- * Supported since: 2.6.0.9
- * Arguments: <key> [<display>]
- * Answers:
- * OK <value>
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 50 = Unsupported key
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_GET_CONFIG_FILE "GET_CONFIG_FILE" /* None */
-/* GET_CONFIG_FILE: Get defaults config file location being used by
- # the daemon. If the GDM daemon was started
- * with the --config option, it will return
- * the value passed in via that argument.
- * Supported since: 2.8.0.2
- * Arguments: None
- * Answers:
- * OK <full path to GDM configuration file>
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_GET_CUSTOM_CONFIG_FILE "GET_CUSTOM_CONFIG_FILE" /* None */
-/* GET_CONFIG_FILE: Get custom config file location being used by
- # the daemon.
- * Supported since: 2.14.0.0
- * Arguments: None
- * Answers:
- * OK <full path to GDM custom configuration file>
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 1 = File not found
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_UPDATE_CONFIG "UPDATE_CONFIG" /* <key> */
-/* UPDATE_CONFIG: Tell the daemon to re-read a key from the
- * GDM configuration file. Any user can request
- * that values are re-read but the daemon will
- * only do so if the file has been modified
- * since GDM first read the file. Only users
- * who can change the GDM configuration file
- * (normally writable only by the root user) can
- * actually modify the GDM configuration. This
- * command is useful to cause the GDM to update
- * itself to recognize a change made to the GDM
- * configuration file by the root user.
- *
- * Starting with version 2.13.0.0, all GDM keys are
- * supported except for the following:
- *
- * daemon/PidFile
- * daemon/ConsoleNotify
- * daemon/User
- * daemon/Group
- * daemon/LogDir
- * daemon/ServAuthDir
- * daemon/UserAuthDir
- * daemon/UserAuthFile
- * daemon/UserAuthFBDir
- *
- * GDM also supports the following Psuedokeys:
- *
- * xdmcp/PARAMETERS (2.3.90.2) updates the following:
- * xdmcp/MaxPending
- * xdmcp/MaxSessions
- * xdmcp/MaxWait
- * xdmcp/DisplaysPerHost
- * xdmcp/HonorIndirect
- * xdmcp/MaxPendingIndirect
- * xdmcp/MaxWaitIndirect
- * xdmcp/PingIntervalSeconds (only affects new connections)
- *
- * xservers/PARAMETERS (2.13.0.4) updates the following:
- * all [server-foo] sections.
- *
- * Supported keys for previous versions of GDM:
- *
- * security/AllowRoot (2.3.90.2)
- * security/AllowRemoteRoot (2.3.90.2)
- * security/AllowRemoteAutoLogin (2.3.90.2)
- * security/RetryDelay (2.3.90.2)
- * security/DisallowTCP (2.4.2.0)
- * daemon/Greeter (2.3.90.2)
- * daemon/RemoteGreeter (2.3.90.2)
- * xdmcp/Enable (2.3.90.2)
- * xdmcp/Port (2.3.90.2)
- * daemon/TimedLogin (2.3.90.3)
- * daemon/TimedLoginEnable (2.3.90.3)
- * daemon/TimedLoginDelay (2.3.90.3)
- * greeter/SystemMenu (2.3.90.3)
- * greeter/ConfigAvailable (2.3.90.3)
- * greeter/ChooserButton (2.4.2.0)
- * greeter/SoundOnLoginFile (2.5.90.0)
- * daemon/AddGtkModules (2.5.90.0)
- * daemon/GtkModulesList (2.5.90.0)
- * Supported since: 2.3.90.2
- * Arguments: <key>
- * <key> is just the base part of the key such as "security/AllowRemoteRoot"
- * Answers:
- * OK
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 50 = Unsupported key
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_GREETERPIDS "GREETERPIDS" /* None */
-/* GREETERPIDS: List all greeter pids so that one can send HUP
- * to them for config rereading. Of course one
- * must be root to do that.
- * Supported since: 2.3.90.2
- * Arguments: None
- * Answers:
- * OK <pid>;<pid>;...
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_QUERY_LOGOUT_ACTION "QUERY_LOGOUT_ACTION" /* None */
-/* QUERY_LOGOUT_ACTION: Query which logout actions are possible
- * Only supported on connections that passed
- * AUTH_LOCAL.
- * Supported since: 2.5.90.0
- * Answers:
- * OK <action>;<action>;...
- * Where action is one of HALT, REBOOT, SUSPEND or CUSTOM_CMDX (where X in [0,GDM_CUSTOM_COMMAND_MAX)).
- * An empty list can also be returned if no action is possible. A '!' is appended
- * to an action if it was already set with SET_LOGOUT_ACTION or
- * SET_SAFE_LOGOUT_ACTION. Note that SET_LOGOUT_ACTION has precedence
- * over SET_SAFE_LOGOUT_ACTION.
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 100 = Not authenticated
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_QUERY_CUSTOM_CMD_LABELS "QUERY_CUSTOM_CMD_LABELS" /* None */
-/* QUERY_CUSTOM_CMD_LABELS: Query labels belonging to exported custom commands
- * Only supported on connections that passed
- * AUTH_LOCAL.
- * Supported since: 2.5.90.0
- * Answers:
- * OK <label1>;<label2>;...
- * Where labelX is one of the labels belonging to CUSTOM_CMDX (where X in [0,GDM_CUSTOM_COMMAND_MAX)).
- * An empty list can also be returned if none of the custom commands are
- * exported outside login manager (no CustomCommandIsPersistent options are set to true).
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 100 = Not authenticated
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_QUERY_CUSTOM_CMD_NO_RESTART_STATUS "QUERY_CUSTOM_CMD_NO_RESTART_STATUS" /* None */
-/* QUERY_CUSTOM_CMD_NO_RESTART_STATUS: Query NoRestart config options for each of custom commands
- * Only supported on connections that passed
- * AUTH_LOCAL.
- * Supported since: 2.5.90.0
- * Answers:
- * OK <status>
- * Where each bit of the status represents NoRestart value for each of the custom commands.
- * bit on (1): NoRestart = true,
- * bit off (0): NoRestart = false.
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 100 = Not authenticated
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_SET_LOGOUT_ACTION "SET_LOGOUT_ACTION" /* <action> */
-/* SET_LOGOUT_ACTION: Tell the daemon to halt/restart/suspend after
- * slave process exits. Only supported on
- * connections that passed AUTH_LOCAL.
- * Supported since: 2.5.90.0
- * Arguments: <action>
- * NONE Set exit action to 'none'
- * HALT Set exit action to 'halt'
- * REBOOT Set exit action to 'reboot'
- * SUSPEND Set exit action to 'suspend'
- * CUSTOM_CMDX Set exit action to 'custom command X' where where X in [0,GDM_CUSTOM_COMMAND_MAX)
- * Answers:
- * OK
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 7 = Unknown logout action, or not available
- * 100 = Not authenticated
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_SET_SAFE_LOGOUT_ACTION "SET_SAFE_LOGOUT_ACTION" /* <action> */
-/* SET_SAFE_LOGOUT_ACTION: Tell the daemon to halt/restart/suspend
- * after everybody logs out. If only one
- * person logs out, then this is obviously
- * the same as the SET_LOGOUT_ACTION. Note
- * that SET_LOGOUT_ACTION has precendence
- * over SET_SAFE_LOGOUT_ACTION if it is set
- * to something other then NONE. If no one
- * is logged in, then the action takes effect
- * immedeately. Only supported on connections
- * that passed AUTH_LOCAL.
- * Supported since: 2.5.90.0
- * Arguments: <action>
- * NONE Set exit action to 'none'
- * HALT Set exit action to 'halt'
- * REBOOT Set exit action to 'reboot'
- * SUSPEND Set exit action to 'suspend'
- * CUSTOM_CMDX Set exit action to 'custom command X' where where X in [0,GDM_CUSTOM_COMMAND_MAX)
- *
- * Answers:
- * OK
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 7 = Unknown logout action, or not available
- * 100 = Not authenticated
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_LOGOUT_ACTION_NONE "NONE"
-#define GDM_SUP_LOGOUT_ACTION_HALT "HALT"
-#define GDM_SUP_LOGOUT_ACTION_REBOOT "REBOOT"
-#define GDM_SUP_LOGOUT_ACTION_SUSPEND "SUSPEND"
-#define GDM_SUP_LOGOUT_ACTION_CUSTOM_CMD_TEMPLATE "CUSTOM_CMD"
-/*
- */
-#define GDM_SUP_QUERY_VT "QUERY_VT" /* None */
-/* QUERY_VT: Ask the daemon about which VT we are currently on.
- * This is useful for logins which don't own
- * /dev/console but are still console logins. Only
- * supported on Linux currently, other places will
- * just get ERROR 8. This is also the way to query
- * if VT support is available in the daemon in the
- * first place. Only supported on connections that
- * passed AUTH_LOCAL.
- * Supported since: 2.5.90.0
- * Arguments: None
- * Answers:
- * OK <vt number>
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 8 = Virtual terminals not supported
- * 100 = Not authenticated
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_SET_VT "SET_VT" /* <vt> */
-/* SET_VT: Change to the specified virtual terminal.
- * This is useful for logins which don't own /dev/console
- * but are still console logins. Only supported on Linux
- * currently, other places will just get ERROR 8.
- * Only supported on connections that passed AUTH_LOCAL.
- * Supported since: 2.5.90.0
- * Arguments: None
- * Answers:
- * OK
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 8 = Virtual terminals not supported
- * 9 = Invalid virtual terminal number
- * 100 = Not authenticated
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_SERVER_BUSY "SERVER_BUSY" /* None */
-/* SERVER_BUSY: Returns true if half or more of the daemon's sockets are
- * busy, false otherwise. Used by slave programs which want
- * to ensure they do not overhwelm the server.
- * Supported since: 2.13.0.8
- * Arguments: None
- * Answers:
- * OK <value>
- * ERROR <err number> <english error description>
- * 0 = Not implemented
- * 200 = Too many messages
- * 999 = Unknown error
- */
-#define GDM_SUP_GET_SERVER_DETAILS "GET_SERVER_DETAILS" /* <server> <key> */
-#define GDM_SUP_CLOSE "CLOSE" /* None */
-/* CLOSE: Close sockets connection
- * Supported since: 2.2.4.0
- * Arguments: None
- * Answers: None
- */
-
-/* User flags for the SUP protocol */
-enum {
- GDM_SUP_FLAG_AUTHENTICATED = 0x1, /* authenticated as a local user,
- * from a local display we started */
- GDM_SUP_FLAG_AUTH_GLOBAL = 0x2 /* authenticated with global cookie */
-};
-
-/* Macros to check authentication level */
-#define GDM_CONN_AUTHENTICATED(conn) \
- ((gdm_connection_get_user_flags (conn) & GDM_SUP_FLAG_AUTHENTICATED) || \
- (gdm_connection_get_user_flags (conn) & GDM_SUP_FLAG_AUTH_GLOBAL))
-
-#define GDM_CONN_AUTH_GLOBAL(conn) \
- (gdm_connection_get_user_flags (conn) & GDM_SUP_FLAG_AUTH_GLOBAL)
-
-
-#define NEVER_FAILS_seteuid(uid) \
- { int r = 0; \
- if (geteuid () != uid) \
- r = seteuid (uid); \
- if G_UNLIKELY (r != 0) \
- gdm_fail ("GDM file %s: line %d (%s): Cannot run seteuid to %d: %s", \
- __FILE__, \
- __LINE__, \
- __PRETTY_FUNCTION__, \
- (int)uid, \
- strerror (errno)); }
-#define NEVER_FAILS_setegid(gid) \
- { int r = 0; \
- if (getegid () != gid) \
- r = setegid (gid); \
- if G_UNLIKELY (r != 0) \
- gdm_fail ("GDM file %s: line %d (%s): Cannot run setegid to %d: %s", \
- __FILE__, \
- __LINE__, \
- __PRETTY_FUNCTION__, \
- (int)gid, \
- strerror (errno)); }
-
-/* first goes to euid-root and then sets the egid and euid, to make sure
- * this succeeds */
-#define NEVER_FAILS_root_set_euid_egid(uid,gid) \
- { NEVER_FAILS_seteuid (0); \
- NEVER_FAILS_setegid (gid); \
- if (uid != 0) { NEVER_FAILS_seteuid (uid); } }
-
-#endif /* GDM_H */
-
-/* EOF */