diff options
author | Brian Cameron <brian.cameron@sun.com> | 2007-01-31 04:43:46 +0000 |
---|---|---|
committer | Brian Cameron <bcameron@src.gnome.org> | 2007-01-31 04:43:46 +0000 |
commit | 2c786d14b009c8a39b5637100558e3a483df8fcd (patch) | |
tree | 1be7e7443b2e152214a09968069298b5507bcb38 | |
parent | 2faac2a2fce2172a9970a95984bd7f855dbcf060 (diff) | |
download | gdm-2c786d14b009c8a39b5637100558e3a483df8fcd.tar.gz |
Fix warnings and fix an assertion in gdm because it called
2007-01-31 Brian Cameron <brian.cameron@sun.com>
* gui/greeter/greeter_item_customlist.c,
gui/greeter/greeter_canvas_item.c,
gui/greeter/greeter_canvas_text.c,
gui/greeter/greeter_session.c,
gui/gdmXnestchooser.c, gui/gdmchooser.c,
gui/gdmconfig.[ch], daemon/xdmcp.c,
daemon/verify-pam.c, daemon/server.c,
daemon/gdmconfig.c: Fix warnings and fix an
assertion in gdm because it called
gdm_xdmcp_send_forward_query also for IPv6.
Patch by Ludwig Nussel.
svn path=/branches/gnome-2-16/; revision=4557
-rw-r--r-- | ChangeLog | 14 | ||||
-rw-r--r-- | daemon/gdmconfig.c | 6 | ||||
-rw-r--r-- | daemon/gdmconfig.h | 4 | ||||
-rw-r--r-- | daemon/server.c | 2 | ||||
-rw-r--r-- | daemon/verify-pam.c | 10 | ||||
-rw-r--r-- | daemon/xdmcp.c | 798 | ||||
-rw-r--r-- | gui/gdmXnestchooser.c | 4 | ||||
-rw-r--r-- | gui/gdmchooser.c | 8 | ||||
-rw-r--r-- | gui/gdmconfig.c | 9 | ||||
-rw-r--r-- | gui/greeter/greeter_canvas_item.c | 2 | ||||
-rw-r--r-- | gui/greeter/greeter_canvas_text.c | 2 | ||||
-rw-r--r-- | gui/greeter/greeter_item_customlist.c | 2 | ||||
-rw-r--r-- | gui/greeter/greeter_session.c | 1 |
13 files changed, 542 insertions, 320 deletions
@@ -1,3 +1,17 @@ +2007-01-31 Brian Cameron <brian.cameron@sun.com> + + * gui/greeter/greeter_item_customlist.c, + gui/greeter/greeter_canvas_item.c, + gui/greeter/greeter_canvas_text.c, + gui/greeter/greeter_session.c, + gui/gdmXnestchooser.c, gui/gdmchooser.c, + gui/gdmconfig.[ch], daemon/xdmcp.c, + daemon/verify-pam.c, daemon/server.c, + daemon/gdmconfig.c: Fix warnings and fix an + assertion in gdm because it called + gdm_xdmcp_send_forward_query also for IPv6. + Patch by Ludwig Nussel. + 2007-01-29 Brian Cameron <brian.cameron@sun.com> * Release 2.16.5: diff --git a/daemon/gdmconfig.c b/daemon/gdmconfig.c index 2ae638ed..df210246 100644 --- a/daemon/gdmconfig.c +++ b/daemon/gdmconfig.c @@ -616,7 +616,7 @@ gdm_get_custom_config (struct stat *statbuf) * appended, and never gdm.conf. */ static gchar * -gdm_get_per_display_custom_config_file (gchar *display) +gdm_get_per_display_custom_config_file (const gchar *display) { return g_strdup_printf ("%s%s", custom_config_file, display); } @@ -779,7 +779,7 @@ gboolean gdm_get_value_bool_per_display (gchar *display, gchar *key) * value if none exists. Note that this value needs to be freed, * unlike the non-per-display version. */ -gchar * gdm_get_value_string_per_display (gchar *display, gchar *key) +gchar * gdm_get_value_string_per_display (const gchar *display, gchar *key) { gchar *perdispval; @@ -805,7 +805,7 @@ gchar * gdm_get_value_string_per_display (gchar *display, gchar *key) * sure they are added to the if-test below. */ void -gdm_config_key_to_string_per_display (gchar *display, gchar *key, gchar **retval) +gdm_config_key_to_string_per_display (const gchar *display, gchar *key, gchar **retval) { gchar *file; gchar **splitstr = g_strsplit (key, "/", 2); diff --git a/daemon/gdmconfig.h b/daemon/gdmconfig.h index 72ffa1cc..cf2f9bf6 100644 --- a/daemon/gdmconfig.h +++ b/daemon/gdmconfig.h @@ -29,7 +29,7 @@ gchar* gdm_get_custom_config_file (void); gchar* gdm_get_value_string (gchar *key); gboolean gdm_get_value_bool (gchar *key); gint gdm_get_value_int (gchar *key); -gchar* gdm_get_value_string_per_display (gchar *display, +gchar* gdm_get_value_string_per_display (const gchar *display, gchar *key); gboolean gdm_get_value_bool_per_display (gchar *display, gchar *key); @@ -42,7 +42,7 @@ void gdm_set_value_bool (gchar *key, void gdm_set_value_int (gchar *key, gint value); void gdm_config_key_to_string_per_display - (gchar *file, + (const gchar *display, gchar *key, gchar **retval); void gdm_config_key_to_string (gchar *file, diff --git a/daemon/server.c b/daemon/server.c index 75ccf9fb..ac1f6f6b 100644 --- a/daemon/server.c +++ b/daemon/server.c @@ -1395,7 +1395,7 @@ gdm_server_alloc (gint id, const gchar *command) hostname[1023] = '\0'; if (gethostname (hostname, 1023) == -1) - strcmp (hostname, "localhost.localdomain"); + strcpy (hostname, "localhost.localdomain"); d = g_new0 (GdmDisplay, 1); diff --git a/daemon/verify-pam.c b/daemon/verify-pam.c index 694c0851..f473c49f 100644 --- a/daemon/verify-pam.c +++ b/daemon/verify-pam.c @@ -455,14 +455,14 @@ perhaps_translate_message (const char *msg) /* Internal PAM conversation function. Interfaces between the PAM * authentication system and the actual greeter program */ -static gint +static int gdm_verify_pam_conv (int num_msg, struct pam_message **msg, struct pam_response **resp, void *appdata_ptr) { int replies = 0; int i; - char *s; + char *s = NULL; struct pam_response *reply = NULL; const void *p; const char *login; @@ -624,7 +624,7 @@ static struct pam_conv pamc = { /* Extra message to give on queries */ static char *extra_standalone_message = NULL; -static gint +static int gdm_verify_standalone_pam_conv (int num_msg, struct pam_message **msg, struct pam_response **resp, void *appdata_ptr) @@ -852,7 +852,7 @@ authenticate_again: * PAM Stacks, in case one display should use a different * authentication mechanism than another display. */ - pam_stack = gdm_get_value_string_per_display (display, GDM_KEY_PAM_STACK); + pam_stack = gdm_get_value_string_per_display ((char *)display, GDM_KEY_PAM_STACK); if ( ! create_pamh (d, pam_stack, login, &pamc, display, &pamerr)) { if (started_timer) @@ -1229,7 +1229,7 @@ gdm_verify_setup_user (GdmDisplay *d, const gchar *login, const gchar *display, * PAM Stacks, in case one display should use a different * authentication mechanism than another display. */ - pam_stack = gdm_get_value_string_per_display (display, GDM_KEY_PAM_STACK); + pam_stack = gdm_get_value_string_per_display ((char *)display, GDM_KEY_PAM_STACK); pam_service_name = g_strdup_printf ("%s-autologin", pam_stack); if ( ! create_pamh (d, pam_service_name, login, &standalone_pamc, diff --git a/daemon/xdmcp.c b/daemon/xdmcp.c index 42062d80..2e25cbe2 100644 --- a/daemon/xdmcp.c +++ b/daemon/xdmcp.c @@ -103,7 +103,8 @@ #include "cookie.h" #include "gdmconfig.h" -#define XDMCP_MULTICAST_ADDRESS "ff02::1" /*This is to be changed when the Xdmcp Multicast address is decided */ +/*This is to be changed when the Xdmcp Multicast address is decided */ +#define XDMCP_MULTICAST_ADDRESS "ff02::1" int gdm_xdmcpfd = -1; @@ -128,92 +129,121 @@ extern gint xdmcp_sessions; static gboolean gdm_xdmcp_decode_packet (GIOChannel *source, GIOCondition cond, gpointer data); -/*************************** IPv6 specific prototypes *****************************/ - -#ifdef ENABLE_IPV6 -static void gdm_xdmcp_handle_query (struct sockaddr_storage *clnt_sa, - gint len, - gint type); -static void gdm_xdmcp_handle_forward_query (struct sockaddr_storage *clnt_sa, gint len); -static void gdm_xdmcp_handle_request (struct sockaddr_storage *clnt_sa, gint len); -static void gdm_xdmcp_handle_manage (struct sockaddr_storage *clnt_sa, gint len); -static void gdm_xdmcp_handle_managed_forward (struct sockaddr_storage *clnt_sa, gint len); -static void gdm_xdmcp_handle_got_managed_forward (struct sockaddr_storage *clnt_sa, gint len); -static void gdm_xdmcp_handle_keepalive (struct sockaddr_storage *clnt_sa, gint len); -static void gdm_xdmcp_send_willing (struct sockaddr_storage *clnt_sa); -static void gdm_xdmcp_send_unwilling (struct sockaddr_storage *clnt_sa, gint type); -static void gdm_xdmcp_send_accept (GdmHostent *he, struct sockaddr_storage *clnt_sa, - gint displaynum); -static void gdm_xdmcp_send_decline (struct sockaddr_storage *clnt_sa, const char *reason); -static void gdm_xdmcp_send_refuse (struct sockaddr_storage *clnt_sa, CARD32 sessid); -static void gdm_xdmcp_send_failed (struct sockaddr_storage *clnt_sa, CARD32 sessid); -static void gdm_xdmcp_send_alive (struct sockaddr_storage *clnt_sa, CARD16 dspnum, CARD32 sessid); + +/************************ IPv6 specific prototypes **************************/ + +#ifdef ENABLE_IPV6 + +static void gdm_xdmcp_handle_query (struct sockaddr_storage *clnt_sa, + gint len, + gint type); +static void gdm_xdmcp_handle_forward_query (struct sockaddr_storage *clnt_sa, + gint len); +static void gdm_xdmcp_handle_request (struct sockaddr_storage *clnt_sa, + gint len); +static void gdm_xdmcp_handle_manage (struct sockaddr_storage *clnt_sa, + gint len); +static void gdm_xdmcp_handle_managed_forward (struct sockaddr_storage *clnt_sa, + gint len); +static void gdm_xdmcp_handle_got_managed_forward (struct sockaddr_storage *clnt_sa, + gint len); +static void gdm_xdmcp_handle_keepalive (struct sockaddr_storage *clnt_sa, + gint len); +static void gdm_xdmcp_send_willing (struct sockaddr_storage *clnt_sa); +static void gdm_xdmcp_send_unwilling (struct sockaddr_storage *clnt_sa, + gint type); +static void gdm_xdmcp_send_accept (GdmHostent *he, + struct sockaddr_storage *clnt_sa, + gint displaynum); +static void gdm_xdmcp_send_decline (struct sockaddr_storage *clnt_sa, + const char *reason); +static void gdm_xdmcp_send_refuse (struct sockaddr_storage *clnt_sa, + CARD32 sessid); +static void gdm_xdmcp_send_failed (struct sockaddr_storage *clnt_sa, + CARD32 sessid); +static void gdm_xdmcp_send_alive (struct sockaddr_storage *clnt_sa, + CARD16 dspnum, CARD32 sessid); static void gdm_xdmcp_send_managed_forward (struct sockaddr_storage *clnt_sa, - struct sockaddr_storage *origin); -static void gdm_xdmcp_send_forward_query6 (GdmIndirectDisplay *id, - struct sockaddr_in6 *clnt_sa, - struct in6_addr *display_addr, - ARRAYofARRAY8Ptr authlist); -static gboolean gdm_xdmcp_host_allow (struct sockaddr_storage *clnt_sa); + struct sockaddr_storage *origin); +static void gdm_xdmcp_send_forward_query6 (GdmIndirectDisplay *id, + struct sockaddr_in6 *clnt_sa, + struct in6_addr *display_addr, + ARRAYofARRAY8Ptr authlist); +static gboolean gdm_xdmcp_host_allow (struct sockaddr_storage *clnt_sa); static GdmForwardQuery * gdm_forward_query_alloc (struct sockaddr_storage *mgr_sa, - struct sockaddr_storage *dsp_sa); + struct sockaddr_storage *dsp_sa); static GdmForwardQuery * gdm_forward_query_lookup (struct sockaddr_storage *clnt_sa); static void gdm_xdmcp_whack_queued_managed_forwards6 (struct sockaddr_in6 *clnt_sa, - struct in6_addr *origin); + struct in6_addr *origin); static void gdm_xdmcp_send_got_managed_forward6 (struct sockaddr_in6 *clnt_sa, - struct in6_addr *origin); -static int gdm_xdmcp_displays_from_host (struct sockaddr_storage *addr); -static GdmDisplay *gdm_xdmcp_display_lookup_by_host (struct sockaddr_storage *addr, int dspnum); -static GdmDisplay *gdm_xdmcp_display_alloc (struct sockaddr_storage *addr, GdmHostent *he, int displaynum); + struct in6_addr *origin); +static int gdm_xdmcp_displays_from_host (struct sockaddr_storage *addr); +static GdmDisplay *gdm_xdmcp_display_lookup_by_host (struct sockaddr_storage *addr, + int dspnum); +static GdmDisplay *gdm_xdmcp_display_alloc (struct sockaddr_storage *addr, + GdmHostent *he, int displaynum); #else - -static void gdm_xdmcp_handle_forward_query (struct sockaddr_in *clnt_sa, gint len); -static void gdm_xdmcp_handle_query (struct sockaddr_in *clnt_sa, - gint len, - gint type); - static void gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, gint len); - static void gdm_xdmcp_handle_manage (struct sockaddr_in *clnt_sa, gint len); - static void gdm_xdmcp_handle_managed_forward (struct sockaddr_in *clnt_sa, gint len); - static void gdm_xdmcp_handle_got_managed_forward (struct sockaddr_in *clnt_sa, gint len); - static void gdm_xdmcp_handle_keepalive (struct sockaddr_in *clnt_sa, gint len); - static void gdm_xdmcp_send_willing (struct sockaddr_in *clnt_sa); - static void gdm_xdmcp_send_unwilling (struct sockaddr_in *clnt_sa, gint type); - static void gdm_xdmcp_send_accept (GdmHostent *he /* eaten and freed */, - struct sockaddr_in *clnt_sa, - int displaynum); -static void gdm_xdmcp_send_decline (struct sockaddr_in *clnt_sa, const char *reason); - static void gdm_xdmcp_send_refuse (struct sockaddr_in *clnt_sa, CARD32 sessid); - static void gdm_xdmcp_send_failed (struct sockaddr_in *clnt_sa, CARD32 sessid); - static void gdm_xdmcp_send_alive (struct sockaddr_in *clnt_sa, CARD16 dspnum, CARD32 sessid); +/************************ IPv4 specific prototypes **************************/ + +static void gdm_xdmcp_handle_forward_query (struct sockaddr_in *clnt_sa, + gint len); +static void gdm_xdmcp_handle_query (struct sockaddr_in *clnt_sa, + gint len, + gint type); + static void gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, + gint len); + static void gdm_xdmcp_handle_manage (struct sockaddr_in *clnt_sa, + gint len); + static void gdm_xdmcp_handle_managed_forward (struct sockaddr_in *clnt_sa, + gint len); + static void gdm_xdmcp_handle_got_managed_forward (struct sockaddr_in *clnt_sa, + gint len); + static void gdm_xdmcp_handle_keepalive (struct sockaddr_in *clnt_sa, + gint len); + static void gdm_xdmcp_send_willing (struct sockaddr_in *clnt_sa); + static void gdm_xdmcp_send_unwilling (struct sockaddr_in *clnt_sa, + gint type); + static void gdm_xdmcp_send_accept (GdmHostent *he /* eaten and freed */, + struct sockaddr_in *clnt_sa, + int displaynum); +static void gdm_xdmcp_send_decline (struct sockaddr_in *clnt_sa, + const char *reason); + static void gdm_xdmcp_send_refuse (struct sockaddr_in *clnt_sa, + CARD32 sessid); + static void gdm_xdmcp_send_failed (struct sockaddr_in *clnt_sa, + CARD32 sessid); + static void gdm_xdmcp_send_alive (struct sockaddr_in *clnt_sa, + CARD16 dspnum, CARD32 sessid); static void gdm_xdmcp_send_managed_forward (struct sockaddr_in *clnt_sa, struct sockaddr_in *origin); - static gboolean gdm_xdmcp_host_allow (struct sockaddr_in *clnt_sa); + static gboolean gdm_xdmcp_host_allow (struct sockaddr_in *clnt_sa); static GdmForwardQuery * gdm_forward_query_alloc (struct sockaddr_in *mgr_sa, - struct sockaddr_in *dsp_sa); + struct sockaddr_in *dsp_sa); static GdmForwardQuery * gdm_forward_query_lookup (struct sockaddr_in *clnt_sa); -static int gdm_xdmcp_displays_from_host (struct sockaddr_in *addr); -static GdmDisplay *gdm_xdmcp_display_lookup_by_host (struct sockaddr_in *addr, int dspnum); -static GdmDisplay *gdm_xdmcp_display_alloc (struct sockaddr_in *addr, GdmHostent *he, int displaynum); - +static int gdm_xdmcp_displays_from_host (struct sockaddr_in *addr); +static GdmDisplay *gdm_xdmcp_display_lookup_by_host (struct sockaddr_in *addr, + int dspnum); +static GdmDisplay *gdm_xdmcp_display_alloc (struct sockaddr_in *addr, + GdmHostent *he, int displaynum); #endif /*IPv4 / IPv6*/ static void gdm_xdmcp_whack_queued_managed_forwards (struct sockaddr_in *clnt_sa, - struct in_addr *origin); + struct in_addr *origin); static void gdm_xdmcp_send_got_managed_forward (struct sockaddr_in *clnt_sa, - struct in_addr *origin); -static void gdm_xdmcp_send_forward_query (GdmIndirectDisplay *id, - struct sockaddr_in *clnt_sa, - struct in_addr *display_addr, - ARRAYofARRAY8Ptr authlist); + struct in_addr *origin); +static void gdm_xdmcp_send_forward_query (GdmIndirectDisplay *id, + struct sockaddr_in *clnt_sa, + struct in_addr *display_addr, + ARRAYofARRAY8Ptr authlist); static void gdm_xdmcp_whack_queued_managed_forwards (struct sockaddr_in *clnt_sa, - struct in_addr *origin); + struct in_addr *origin); static void gdm_xdmcp_send_got_managed_forward (struct sockaddr_in *clnt_sa, - struct in_addr *origin); + struct in_addr *origin); static GdmDisplay *gdm_xdmcp_display_lookup (CARD32 sessid); static void gdm_xdmcp_display_dispose_check (const gchar *hostname, int dspnum); -static void gdm_xdmcp_displays_check (void); -static void gdm_forward_query_dispose (GdmForwardQuery *q); +static void gdm_xdmcp_displays_check (void); +static void gdm_forward_query_dispose (GdmForwardQuery *q); static GSList *forward_queries = NULL; @@ -241,8 +271,8 @@ static GSList *managed_forwards = NULL; * XDM-AUTHENTICATION-1 which requires a key database with private * keys from all X terminals on your LAN. Fun, fun, fun. * - * Furthermore user passwords go over the wire in cleartext anyway so - * protecting cookies is not that important. + * Furthermore user passwords go over the wire in cleartext anyway, + * so protecting cookies is not that important. */ typedef struct _XdmAuth { @@ -285,16 +315,19 @@ gdm_xdmcp_displays_from_host (struct sockaddr_in *addr) if (SERVER_IS_XDMCP (disp)) { #ifdef ENABLE_IPV6 if (disp->addrtype == AF_INET6 && - memcmp (&disp->addr6, &((struct sockaddr_in6 *)addr)->sin6_addr, sizeof (struct in6_addr)) == 0) + memcmp (&disp->addr6, + &((struct sockaddr_in6 *)addr)->sin6_addr, + sizeof (struct in6_addr)) == 0) count++; else #endif if (disp->addrtype == AF_INET && - memcmp (&disp->addr, &((struct sockaddr_in *)addr)->sin_addr, sizeof (struct in_addr)) == 0) + memcmp (&disp->addr, + &((struct sockaddr_in *)addr)->sin_addr, + sizeof (struct in_addr)) == 0) count++; } } - return count; } @@ -312,12 +345,18 @@ gdm_xdmcp_display_lookup_by_host (struct sockaddr_in *addr, int dspnum) if (SERVER_IS_XDMCP (disp)) { #ifdef ENABLE_IPV6 if (disp->addrtype == AF_INET6) { - if ((memcmp (&disp->addr6, &((struct sockaddr_in6 *)addr)->sin6_addr, sizeof (struct in6_addr)) == 0) && disp->xdmcp_dispnum == dspnum) + if ((memcmp (&disp->addr6, + &((struct sockaddr_in6 *)addr)->sin6_addr, + sizeof (struct in6_addr)) == 0) && + disp->xdmcp_dispnum == dspnum) return disp; } else #endif - if ((memcmp (&disp->addr, &((struct sockaddr_in *)addr)->sin_addr, sizeof (struct in_addr)) == 0) && disp->xdmcp_dispnum == dspnum) + if ((memcmp (&disp->addr, + &((struct sockaddr_in *)addr)->sin_addr, + sizeof (struct in_addr)) == 0) && + disp->xdmcp_dispnum == dspnum) return disp; } } @@ -349,17 +388,17 @@ gdm_xdmcp_init (void) if G_UNLIKELY (gethostname (hostbuf, 1023) != 0) { gdm_error (_("%s: Could not get server hostname: %s!"), "gdm_xdmcp_init", strerror (errno)); - strcmp (hostbuf, "localhost.localdomain"); + strcpy (hostbuf, "localhost.localdomain"); } if ( ! initted) { uname (&name); - sysid = g_strconcat (name.sysname, " ", name.release, NULL); - - servhost.data = (CARD8 *) g_strdup (hostbuf); + sysid = g_strconcat (name.sysname, " ", + name.release, NULL); + servhost.data = (CARD8 *) g_strdup (hostbuf); servhost.length = strlen ((char *) servhost.data); - initted = TRUE; + initted = TRUE; } gdm_debug ("XDMCP: Start up on host %s, port %d", hostbuf, udpport); @@ -380,13 +419,17 @@ gdm_xdmcp_init (void) #ifdef ENABLE_IPV6 if (have_ipv6 ()) { ((struct sockaddr_in6 *)(&serv_sa))->sin6_family = AF_INET6; - ((struct sockaddr_in6 *)(&serv_sa))->sin6_port = htons (udpport); /* UDP 177 */ - ((struct sockaddr_in6 *)(&serv_sa))->sin6_addr = in6addr_any; + ((struct sockaddr_in6 *)(&serv_sa))->sin6_port = htons (udpport); /* UDP 177 */ + ((struct sockaddr_in6 *)(&serv_sa))->sin6_addr = in6addr_any; addrlen = sizeof (struct sockaddr_in6); /* Checking and Setting Multicast options */ if (gdm_get_value_bool (GDM_KEY_MULTICAST)) { - int socktemp; /* temporary socket for getting info about available interfaces*/ + /* + * socktemp is a temporary socket for getting info about + * available interfaces + */ + int socktemp; int i, num; char *buf; struct ipv6_mreq mreq; @@ -399,7 +442,8 @@ gdm_xdmcp_init (void) if (ve_string_empty (gdm_get_value_string (GDM_KEY_MULTICAST_ADDR))) { /* Stuff it with all-node multicast address */ - gdm_set_value_string (GDM_KEY_MULTICAST_ADDR, XDMCP_MULTICAST_ADDRESS); + gdm_set_value_string (GDM_KEY_MULTICAST_ADDR, + XDMCP_MULTICAST_ADDRESS); } socktemp = socket (AF_INET, SOCK_DGRAM, 0); @@ -412,6 +456,7 @@ gdm_xdmcp_init (void) #endif ifc.ifc_len = sizeof (struct ifreq) * num; ifc.ifc_buf = buf = malloc (ifc.ifc_len); + if (ioctl (socktemp, SIOCGIFCONF, &ifc) >= 0) { ifr = ifc.ifc_req; num = ifc.ifc_len / sizeof (struct ifreq); /* No of interfaces */ @@ -426,8 +471,10 @@ gdm_xdmcp_init (void) /* paranoia */ ifreq.ifr_name[sizeof (ifreq.ifr_name) - 1] = '\0'; - if (ioctl (socktemp, SIOCGIFFLAGS, &ifreq) < 0) - gdm_debug ("XDMCP: Could not get SIOCGIFFLAGS for %s", ifr[i].ifr_name); + if (ioctl (socktemp, SIOCGIFFLAGS, &ifreq) < 0) { + gdm_debug ("XDMCP: Could not get SIOCGIFFLAGS for %s", + ifr[i].ifr_name); + } ifindex = if_nametoindex (ifr[i].ifr_name); @@ -439,8 +486,11 @@ gdm_xdmcp_init (void) } mreq.ipv6mr_interface = ifindex; - inet_pton (AF_INET6, gdm_get_value_string (GDM_KEY_MULTICAST_ADDR), &mreq.ipv6mr_multiaddr); - setsockopt (gdm_xdmcpfd, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, sizeof (mreq)); + inet_pton (AF_INET6, + gdm_get_value_string (GDM_KEY_MULTICAST_ADDR), + &mreq.ipv6mr_multiaddr); + setsockopt (gdm_xdmcpfd, IPPROTO_IPV6, IPV6_JOIN_GROUP, + &mreq, sizeof (mreq)); } } g_free (buf); @@ -466,13 +516,13 @@ gdm_xdmcp_init (void) return TRUE; } - void gdm_xdmcp_run (void) { GIOChannel *xdmcpchan; xdmcpchan = g_io_channel_unix_new (gdm_xdmcpfd); + g_io_channel_set_encoding (xdmcpchan, NULL, NULL); g_io_channel_set_buffered (xdmcpchan, FALSE); @@ -552,12 +602,18 @@ gdm_xdmcp_decode_packet (GIOChannel *source, GIOCondition cond, gpointer data) if (clnt_sa.ss_family == AF_INET6) { char buffer6[INET6_ADDRSTRLEN]; - gdm_debug ("gdm_xdmcp_decode: Received opcode %s from client %s", opcode_names[header.opcode], inet_ntop (AF_INET6, &((struct sockaddr_in6 *)(&clnt_sa))->sin6_addr, buffer6, INET6_ADDRSTRLEN)); + gdm_debug ("gdm_xdmcp_decode: Received opcode %s from client %s", + opcode_names[header.opcode], + inet_ntop (AF_INET6, + &((struct sockaddr_in6 *)(&clnt_sa))->sin6_addr, + buffer6, INET6_ADDRSTRLEN)); } else #endif { - gdm_debug ("gdm_xdmcp_decode: Received opcode %s from client %s", opcode_names[header.opcode], inet_ntoa (((struct sockaddr_in *)(&clnt_sa))->sin_addr)); + gdm_debug ("gdm_xdmcp_decode: Received opcode %s from client %s", + opcode_names[header.opcode], + inet_ntoa (((struct sockaddr_in *)(&clnt_sa))->sin_addr)); } } @@ -568,14 +624,22 @@ gdm_xdmcp_decode_packet (GIOChannel *source, GIOCondition cond, gpointer data) char buffer6[INET6_ADDRSTRLEN]; - gdm_debug ("gdm_xdmcp_decode: Received opcode %s from client %s", gdm_opcode_names[header.opcode - GDM_XDMCP_FIRST_OPCODE], inet_ntop (AF_INET6, &((struct sockaddr_in6 *)(&clnt_sa))->sin6_addr, buffer6, INET6_ADDRSTRLEN)); + gdm_debug ("gdm_xdmcp_decode: Received opcode %s from client %s", + gdm_opcode_names[header.opcode - GDM_XDMCP_FIRST_OPCODE], + inet_ntop (AF_INET6, + &((struct sockaddr_in6 *)(&clnt_sa))->sin6_addr, + buffer6, INET6_ADDRSTRLEN)); } else #endif { char buffer[INET_ADDRSTRLEN]; - gdm_debug ("gdm_xdmcp_decode: Received opcode %s from client %s", gdm_opcode_names[header.opcode - GDM_XDMCP_FIRST_OPCODE], inet_ntop (AF_INET, &((struct sockaddr_in *)(&clnt_sa))->sin_addr, buffer, INET_ADDRSTRLEN)); + gdm_debug ("gdm_xdmcp_decode: Received opcode %s from client %s", + gdm_opcode_names[header.opcode - GDM_XDMCP_FIRST_OPCODE], + inet_ntop (AF_INET, + &((struct sockaddr_in *)(&clnt_sa))->sin_addr, + buffer, INET_ADDRSTRLEN)); } } @@ -624,7 +688,9 @@ gdm_xdmcp_decode_packet (GIOChannel *source, GIOCondition cond, gpointer data) gdm_error (_("%s: Unknown opcode from host %s"), "gdm_xdmcp_decode_packet", - inet_ntop (AF_INET6, &(((struct sockaddr_in6 *)(&clnt_sa))->sin6_addr), buffer6, INET6_ADDRSTRLEN)); + inet_ntop (AF_INET6, + &(((struct sockaddr_in6 *)(&clnt_sa))->sin6_addr), + buffer6, INET6_ADDRSTRLEN)); } else #endif @@ -653,12 +719,16 @@ gdm_xdmcp_handle_query (struct sockaddr_in *clnt_sa, gint len, gint type) if (clnt_sa->ss_family == AF_INET6) { char buffer6[INET6_ADDRSTRLEN]; - gdm_debug ("gdm_xdmcp_handle_query: Opcode %d from %s", type, inet_ntop (AF_INET6, &((struct sockaddr_in6 *)(clnt_sa))->sin6_addr, buffer6, INET6_ADDRSTRLEN)); + gdm_debug ("gdm_xdmcp_handle_query: Opcode %d from %s", type, + inet_ntop (AF_INET6, + &((struct sockaddr_in6 *)(clnt_sa))->sin6_addr, + buffer6, INET6_ADDRSTRLEN)); } else #endif { - gdm_debug ("gdm_xdmcp_handle_query: Opcode %d from %s", type, inet_ntoa (((struct sockaddr_in *)(clnt_sa))->sin_addr)); + gdm_debug ("gdm_xdmcp_handle_query: Opcode %d from %s", + type, inet_ntoa (((struct sockaddr_in *)(clnt_sa))->sin_addr)); } /* Extract array of authentication names from Xdmcp packet */ @@ -671,8 +741,10 @@ gdm_xdmcp_handle_query (struct sockaddr_in *clnt_sa, gint len, gint type) /* Crude checksumming */ for (i = 0 ; i < clnt_authlist.length ; i++) { if G_UNLIKELY (gdm_get_value_bool (GDM_KEY_DEBUG)) { - char *s = g_strndup ((char *) clnt_authlist.data[i].data, clnt_authlist.length); - gdm_debug ("gdm_xdmcp_handle_query: authlist: %s", ve_sure_string (s)); + char *s = g_strndup ((char *) clnt_authlist.data[i].data, + clnt_authlist.length); + gdm_debug ("gdm_xdmcp_handle_query: authlist: %s", + ve_sure_string (s)); g_free (s); } explen += 2+clnt_authlist.data[i].length; @@ -703,9 +775,11 @@ gdm_xdmcp_handle_query (struct sockaddr_in *clnt_sa, gint len, gint type) (id->chosen_host != NULL))) { /* if user chose us, then just send willing */ - if ((((struct sockaddr_in *)clnt_sa)->sin_family == AF_INET && gdm_is_local_addr ((struct in_addr *)(id->chosen_host))) + if ((((struct sockaddr_in *)clnt_sa)->sin_family == AF_INET && + gdm_is_local_addr ((struct in_addr *)(id->chosen_host))) #ifdef ENABLE_IPV6 - || (clnt_sa->ss_family == AF_INET6 && gdm_is_local_addr6 ((struct in6_addr *)(id->chosen_host6))) + || (clnt_sa->ss_family == AF_INET6 && + gdm_is_local_addr6 ((struct in6_addr *)(id->chosen_host6))) #endif ) { @@ -715,9 +789,11 @@ gdm_xdmcp_handle_query (struct sockaddr_in *clnt_sa, gint len, gint type) gdm_xdmcp_send_willing (clnt_sa); } else - if ((((struct sockaddr_in *)clnt_sa)->sin_family == AF_INET && gdm_is_loopback_addr (&(((struct sockaddr_in *)clnt_sa)->sin_addr))) + if ((((struct sockaddr_in *)clnt_sa)->sin_family == AF_INET && + gdm_is_loopback_addr (&(((struct sockaddr_in *)clnt_sa)->sin_addr))) #ifdef ENABLE_IPV6 - || (clnt_sa->ss_family == AF_INET6 && gdm_is_loopback_addr6 (&(((struct sockaddr_in6 *)clnt_sa)->sin6_addr))) + || (clnt_sa->ss_family == AF_INET6 && + gdm_is_loopback_addr6 (&(((struct sockaddr_in6 *)clnt_sa)->sin6_addr))) #endif ) { @@ -738,7 +814,9 @@ gdm_xdmcp_handle_query (struct sockaddr_in *clnt_sa, gint len, gint type) addr6 = &(((struct sockaddr_in6 *)saddr)->sin6_addr); if ( ! gdm_is_loopback_addr6 (addr6)) { /* forward query to * chosen host */ - gdm_xdmcp_send_forward_query6 (id, (struct sockaddr_in6 *)clnt_sa, addr6, &clnt_authlist); + gdm_xdmcp_send_forward_query6 (id, + (struct sockaddr_in6 *)clnt_sa, + addr6, &clnt_authlist); } } else @@ -747,7 +825,9 @@ gdm_xdmcp_handle_query (struct sockaddr_in *clnt_sa, gint len, gint type) addr = &(((struct sockaddr_in *)saddr)->sin_addr); if ( ! gdm_is_loopback_addr (addr)) { /* forward query to * chosen host */ - gdm_xdmcp_send_forward_query (id, (struct sockaddr_in *)clnt_sa, addr, &clnt_authlist); + gdm_xdmcp_send_forward_query (id, + (struct sockaddr_in *)clnt_sa, + addr, &clnt_authlist); } } @@ -756,10 +836,22 @@ gdm_xdmcp_handle_query (struct sockaddr_in *clnt_sa, gint len, gint type) } } else { /* or send forward query to chosen host */ - gdm_xdmcp_send_forward_query - (id, (struct sockaddr_in *)clnt_sa, - &(((struct sockaddr_in *)clnt_sa)->sin_addr), - &clnt_authlist); +#ifdef ENABLE_IPV6 + if (clnt_sa->ss_family == AF_INET6) + { + gdm_xdmcp_send_forward_query6 + (id, (struct sockaddr_in6 *)clnt_sa, + &(((struct sockaddr_in6 *)clnt_sa)->sin6_addr), + &clnt_authlist); + } + else +#endif + { + gdm_xdmcp_send_forward_query + (id, (struct sockaddr_in *)clnt_sa, + &(((struct sockaddr_in *)clnt_sa)->sin_addr), + &clnt_authlist); + } } } else if (id == NULL) { id = gdm_choose_indirect_alloc (clnt_sa); @@ -784,7 +876,10 @@ gdm_xdmcp_handle_query (struct sockaddr_in *clnt_sa, gint len, gint type) #ifdef ENABLE_IPV6 static void -gdm_xdmcp_send_forward_query6 (GdmIndirectDisplay *id, struct sockaddr_in6 *clnt_sa, struct in6_addr *display_addr, ARRAYofARRAY8Ptr authlist) +gdm_xdmcp_send_forward_query6 (GdmIndirectDisplay *id, + struct sockaddr_in6 *clnt_sa, + struct in6_addr *display_addr, + ARRAYofARRAY8Ptr authlist) { struct sockaddr_in6 sock = {0}; XdmcpHeader header; @@ -794,10 +889,14 @@ gdm_xdmcp_send_forward_query6 (GdmIndirectDisplay *id, struct sockaddr_in6 *clnt char buffer6[INET6_ADDRSTRLEN]; g_assert (id != NULL); - g_assert (id->chosen_host != NULL); + g_assert (id->chosen_host6 != NULL); - gdm_debug ("gdm_xdmcp_send_forward_query6: Sending forward query to %s", inet_ntop (AF_INET6, &(id->chosen_host6), buffer6, sizeof (buffer6))); - gdm_debug ("gdm_xdmcp_send_forward_query6: Query contains %s:%d", inet_ntop (AF_INET6, display_addr, buffer6, sizeof (buffer6)), (int) ntohs (clnt_sa->sin6_port)); + gdm_debug ("gdm_xdmcp_send_forward_query6: Sending forward query to %s", + inet_ntop (AF_INET6, &(id->chosen_host6), + buffer6, sizeof (buffer6))); + gdm_debug ("gdm_xdmcp_send_forward_query6: Query contains %s:%d", + inet_ntop (AF_INET6, display_addr, buffer6, sizeof (buffer6)), + (int) ntohs (clnt_sa->sin6_port)); authlen = 1; for (i = 0 ; i < authlist->length ; i++) { @@ -806,7 +905,7 @@ gdm_xdmcp_send_forward_query6 (GdmIndirectDisplay *id, struct sockaddr_in6 *clnt /* we depend on this being 2 elsewhere as well */ port.length = 2; - port.data = g_new (char, 2); + port.data = g_new (unsigned char, 2); memcpy (port.data, &(clnt_sa->sin6_port), 2); address.length = sizeof (struct in6_addr); address.data = (void *)g_new (struct in6_addr, 1); @@ -828,8 +927,10 @@ gdm_xdmcp_send_forward_query6 (GdmIndirectDisplay *id, struct sockaddr_in6 *clnt sock.sin6_family = AF_INET6; sock.sin6_port = htons (XDM_UDP_PORT); - memcpy (sock.sin6_addr.s6_addr, id->chosen_host6->s6_addr, sizeof (struct in6_addr)); - XdmcpFlush (gdm_xdmcpfd, &buf, (XdmcpNetaddr) &sock, (int)sizeof (struct sockaddr_in6)); + memcpy (sock.sin6_addr.s6_addr, id->chosen_host6->s6_addr, + sizeof (struct in6_addr)); + XdmcpFlush (gdm_xdmcpfd, &buf, (XdmcpNetaddr) &sock, + (int)sizeof (struct sockaddr_in6)); g_free (port.data); g_free (address.data); } @@ -969,7 +1070,9 @@ gdm_forward_query_lookup (struct sockaddr_in *clnt_sa) continue; #ifdef ENABLE_IPV6 if (clnt_sa->ss_family == AF_INET6) { - if (memcmp (((struct sockaddr_in6 *)(q->dsp_sa))->sin6_addr.s6_addr, ((struct sockaddr_in6 *)clnt_sa)->sin6_addr.s6_addr, sizeof (struct in6_addr)) == 0) { + if (memcmp (((struct sockaddr_in6 *)(q->dsp_sa))->sin6_addr.s6_addr, + ((struct sockaddr_in6 *)clnt_sa)->sin6_addr.s6_addr, + sizeof (struct in6_addr)) == 0) { g_slist_free (qlist); return q; } @@ -977,7 +1080,10 @@ gdm_forward_query_lookup (struct sockaddr_in *clnt_sa) if (q->acctime > 0 && curtime > q->acctime + GDM_FORWARD_QUERY_TIMEOUT) { char buffer6[INET6_ADDRSTRLEN]; - gdm_debug ("gdm_forward_query_lookup: Disposing stale forward query from %s", inet_ntop (AF_INET6, &((struct sockaddr_in6 *)q->dsp_sa)->sin6_addr, buffer6, INET6_ADDRSTRLEN)); + gdm_debug ("gdm_forward_query_lookup: Disposing stale forward query from %s", + inet_ntop (AF_INET6, + &((struct sockaddr_in6 *)q->dsp_sa)->sin6_addr, + buffer6, INET6_ADDRSTRLEN)); gdm_forward_query_dispose (q); continue; } @@ -985,7 +1091,8 @@ gdm_forward_query_lookup (struct sockaddr_in *clnt_sa) else #endif { - if (((struct sockaddr_in *)(q->dsp_sa))->sin_addr.s_addr == ((struct sockaddr_in *)clnt_sa)->sin_addr.s_addr) { + if (((struct sockaddr_in *)(q->dsp_sa))->sin_addr.s_addr == + ((struct sockaddr_in *)clnt_sa)->sin_addr.s_addr) { g_slist_free (qlist); return q; } @@ -1006,7 +1113,10 @@ gdm_forward_query_lookup (struct sockaddr_in *clnt_sa) if (clnt_sa->ss_family == AF_INET6) { char buffer6[INET6_ADDRSTRLEN]; - gdm_debug ("gdm_forward_query_lookup: Host %s not found", inet_ntop (AF_INET6, &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, buffer6, INET6_ADDRSTRLEN)); + gdm_debug ("gdm_forward_query_lookup: Host %s not found", + inet_ntop (AF_INET6, + &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, + buffer6, INET6_ADDRSTRLEN)); } else #endif @@ -1033,7 +1143,10 @@ gdm_forward_query_dispose (GdmForwardQuery *q) if (q->dsp_sa->ss_family == AF_INET6) { char buffer6[INET6_ADDRSTRLEN]; - gdm_debug ("gdm_forward_query_dispose: Disposing %s", inet_ntop (AF_INET6, &(((struct sockaddr_in6 *)(q->dsp_sa))->sin6_addr), buffer6, INET6_ADDRSTRLEN)); + gdm_debug ("gdm_forward_query_dispose: Disposing %s", + inet_ntop (AF_INET6, + &(((struct sockaddr_in6 *)(q->dsp_sa))->sin6_addr), + buffer6, INET6_ADDRSTRLEN)); } else #endif @@ -1076,7 +1189,9 @@ gdm_xdmcp_handle_forward_query (struct sockaddr_in *clnt_sa, gint len) gdm_error ("%s: Got FORWARD_QUERY from banned host %s", "gdm_xdmcp_handle_forward query", - inet_ntop (AF_INET6, &(((struct sockaddr_in6 *)clnt_sa)->sin6_addr), buffer6, INET6_ADDRSTRLEN)); + inet_ntop (AF_INET6, + &(((struct sockaddr_in6 *)clnt_sa)->sin6_addr), + buffer6, INET6_ADDRSTRLEN)); } else #endif @@ -1120,8 +1235,10 @@ gdm_xdmcp_handle_forward_query (struct sockaddr_in *clnt_sa, gint len) for (i = 0 ; i < clnt_authlist.length ; i++) { if G_UNLIKELY (gdm_get_value_bool (GDM_KEY_DEBUG)) { - char *s = g_strndup ((char *) clnt_authlist.data[i].data, clnt_authlist.length); - gdm_debug ("gdm_xdmcp_handle_forward_query: authlist: %s", ve_sure_string (s)); + char *s = g_strndup ((char *) clnt_authlist.data[i].data, + clnt_authlist.length); + gdm_debug ("gdm_xdmcp_handle_forward_query: authlist: %s", + ve_sure_string (s)); g_free (s); } explen += 2+clnt_authlist.data[i].length; @@ -1147,8 +1264,10 @@ gdm_xdmcp_handle_forward_query (struct sockaddr_in *clnt_sa, gint len) /* Convert IPv4 address to IPv6 if needed */ struct sockaddr_in tmp_disp_sa = {0}; ((struct sockaddr_in *)(&tmp_disp_sa))->sin_family = AF_INET; - memcpy (&((struct sockaddr_in *)(&tmp_disp_sa))->sin_port, clnt_port.data, 2); - memcpy (&((struct sockaddr_in *)(&tmp_disp_sa))->sin_addr.s_addr, clnt_addr.data, 4); + memcpy (&((struct sockaddr_in *)(&tmp_disp_sa))->sin_port, + clnt_port.data, 2); + memcpy (&((struct sockaddr_in *)(&tmp_disp_sa))->sin_addr.s_addr, + clnt_addr.data, 4); ipv4_addr = inet_ntoa (((struct sockaddr_in *)(&tmp_disp_sa))->sin_addr); strcpy (buffer6, "::ffff:"); @@ -1171,7 +1290,8 @@ gdm_xdmcp_handle_forward_query (struct sockaddr_in *clnt_sa, gint len) g_assert (16 == sizeof (struct in6_addr)); - gdm_xdmcp_whack_queued_managed_forwards6 ((struct sockaddr_in6 *)clnt_sa, ipv6_addr_ptr); + gdm_xdmcp_whack_queued_managed_forwards6 ((struct sockaddr_in6 *)clnt_sa, + ipv6_addr_ptr); ((struct sockaddr_in6 *)(&disp_sa))->sin6_family = AF_INET6; @@ -1179,9 +1299,14 @@ gdm_xdmcp_handle_forward_query (struct sockaddr_in *clnt_sa, gint len) memcpy (&((struct sockaddr_in6 *)(&disp_sa))->sin6_port, clnt_port.data, 2); /* Find client address */ - memcpy (&((struct sockaddr_in6 *)(&disp_sa))->sin6_addr.s6_addr, ipv6_addr_ptr, 16); - - gdm_debug ("gdm_xdmcp_handle_forward_query: Got FORWARD_QUERY for display: %s, port %d", inet_ntop (AF_INET6, &((struct sockaddr_in6 *)(&disp_sa))->sin6_addr, buffer6, INET6_ADDRSTRLEN), ntohs (((struct sockaddr_in6 *)(&disp_sa))->sin6_port)); + memcpy (&((struct sockaddr_in6 *)(&disp_sa))->sin6_addr.s6_addr, + ipv6_addr_ptr, 16); + + gdm_debug ("gdm_xdmcp_handle_forward_query: Got FORWARD_QUERY for display: %s, port %d", + inet_ntop (AF_INET6, + &((struct sockaddr_in6 *)(&disp_sa))->sin6_addr, + buffer6, INET6_ADDRSTRLEN), + ntohs (((struct sockaddr_in6 *)(&disp_sa))->sin6_port)); } else #endif @@ -1194,19 +1319,19 @@ gdm_xdmcp_handle_forward_query (struct sockaddr_in *clnt_sa, gint len) } g_assert (4 == sizeof (struct in_addr)); - gdm_xdmcp_whack_queued_managed_forwards ((struct sockaddr_in *)clnt_sa, (struct in_addr *)clnt_addr.data); + gdm_xdmcp_whack_queued_managed_forwards ((struct sockaddr_in *)clnt_sa, + (struct in_addr *)clnt_addr.data); ((struct sockaddr_in *)(&disp_sa))->sin_family = AF_INET; /* Find client port number */ memcpy (&((struct sockaddr_in *)(&disp_sa))->sin_port, clnt_port.data, 2); /* Find client address */ - memcpy (&((struct sockaddr_in *)(&disp_sa))->sin_addr.s_addr, clnt_addr.data, 4); - gdm_debug ("gdm_xdmcp_handle_forward_query: Got FORWARD_QUERY for display: %s, port %d", inet_ntoa (((struct sockaddr_in *)(&disp_sa))->sin_addr), ntohs (((struct sockaddr_in *)(&disp_sa))->sin_port)); + memcpy (&((struct sockaddr_in *)(&disp_sa))->sin_addr.s_addr, + clnt_addr.data, 4); + gdm_debug ("gdm_xdmcp_handle_forward_query: Got FORWARD_QUERY for display: %s, port %d", + inet_ntoa (((struct sockaddr_in *)(&disp_sa))->sin_addr), + ntohs (((struct sockaddr_in *)(&disp_sa))->sin_port)); } - - - - /* Check with tcp_wrappers if display is allowed to access */ if (gdm_xdmcp_host_allow (&disp_sa)) { GdmForwardQuery *q; @@ -1247,21 +1372,27 @@ gdm_xdmcp_send_willing (struct sockaddr_in *clnt_sa) if (clnt_sa->ss_family == AF_INET6) { char buffer6[INET6_ADDRSTRLEN]; - gdm_debug ("gdm_xdmcp_send_willing: Sending WILLING to %s", inet_ntop (AF_INET6, &(((struct sockaddr_in6 *)clnt_sa)->sin6_addr), buffer6, INET6_ADDRSTRLEN)); + gdm_debug ("gdm_xdmcp_send_willing: Sending WILLING to %s", + inet_ntop (AF_INET6, + &(((struct sockaddr_in6 *)clnt_sa)->sin6_addr), + buffer6, INET6_ADDRSTRLEN)); } else #endif { - gdm_debug ("gdm_xdmcp_send_willing: Sending WILLING to %s", inet_ntoa (((struct sockaddr_in *)clnt_sa)->sin_addr)); + gdm_debug ("gdm_xdmcp_send_willing: Sending WILLING to %s", + inet_ntoa (((struct sockaddr_in *)clnt_sa)->sin_addr)); } if (last_willing == 0 || time (NULL) - 3 > last_willing) { char statusBuf[256] = ""; bin = ve_first_word (willing); + if ( ! ve_string_empty (bin) && g_access (bin, X_OK) == 0 && (fd = popen (willing, "r")) != NULL) { + if (fgets (statusBuf, sizeof (statusBuf), fd) != NULL && ! ve_string_empty (g_strstrip (statusBuf))) { g_free (last_status); @@ -1275,16 +1406,21 @@ gdm_xdmcp_send_willing (struct sockaddr_in *clnt_sa) g_free (last_status); last_status = g_strdup (sysid); } + last_willing = time (NULL); g_free (bin); } #ifdef ENABLE_IPV6 if (clnt_sa->ss_family == AF_INET6) { + if ( ! gdm_is_local_addr6 (&(((struct sockaddr_in6 *)clnt_sa)->sin6_addr)) && gdm_xdmcp_displays_from_host (clnt_sa) >= dispperhost) { - /* Don't translate, this goes over the wire to servers where we - * don't know the charset or language, so it must be ascii */ - status.data = (CARD8 *) g_strdup_printf ("%s (Server is busy)", last_status); + /* + * Don't translate, this goes over the wire to servers where we + * don't know the charset or language, so it must be ascii + */ + status.data = (CARD8 *) g_strdup_printf ("%s (Server is busy)", + last_status); } else { status.data = (CARD8 *) g_strdup (last_status); } @@ -1296,7 +1432,8 @@ gdm_xdmcp_send_willing (struct sockaddr_in *clnt_sa) gdm_xdmcp_displays_from_host (clnt_sa) >= dispperhost) { /* Don't translate, this goes over the wire to servers where we * don't know the charset or language, so it must be ascii */ - status.data = (CARD8 *) g_strdup_printf ("%s (Server is busy)", last_status); + status.data = (CARD8 *) g_strdup_printf ("%s (Server is busy)", + last_status); } else { status.data = (CARD8 *) g_strdup (last_status); } @@ -1304,23 +1441,31 @@ gdm_xdmcp_send_willing (struct sockaddr_in *clnt_sa) status.length = strlen ((char *) status.data); - header.opcode = (CARD16) WILLING; - header.length = 6 + serv_authlist.authentication.length; - header.length += servhost.length + status.length; - header.version = XDM_PROTOCOL_VERSION; + header.opcode = (CARD16) WILLING; + header.length = 6 + serv_authlist.authentication.length; + header.length += servhost.length + status.length; + header.version = XDM_PROTOCOL_VERSION; XdmcpWriteHeader (&buf, &header); - XdmcpWriteARRAY8 (&buf, &serv_authlist.authentication); /* Hardcoded authentication */ + /* Hardcoded authentication */ + XdmcpWriteARRAY8 (&buf, &serv_authlist.authentication); XdmcpWriteARRAY8 (&buf, &servhost); XdmcpWriteARRAY8 (&buf, &status); + #ifdef ENABLE_IPV6 if (clnt_sa->ss_family == AF_INET6) { - XdmcpFlush (gdm_xdmcpfd, &buf, (XdmcpNetaddr)clnt_sa, (int)sizeof (struct sockaddr_in6)); + XdmcpFlush (gdm_xdmcpfd, + &buf, + (XdmcpNetaddr)clnt_sa, + (int)sizeof (struct sockaddr_in6)); } else #endif { - XdmcpFlush (gdm_xdmcpfd, &buf, (XdmcpNetaddr)clnt_sa, (int)sizeof (struct sockaddr_in)); + XdmcpFlush (gdm_xdmcpfd, + &buf, + (XdmcpNetaddr)clnt_sa, + (int)sizeof (struct sockaddr_in)); } g_free (status.data); @@ -1346,19 +1491,26 @@ gdm_xdmcp_send_unwilling (struct sockaddr_in *clnt_sa, gint type) if (clnt_sa->ss_family == AF_INET6) { char buffer6[INET6_ADDRSTRLEN]; - gdm_debug ("gdm_xdmcp_send_unwilling: Sending UNWILLING to %s", inet_ntop (AF_INET6, &(((struct sockaddr_in6 *)clnt_sa)->sin6_addr), buffer6, INET6_ADDRSTRLEN)); + gdm_debug ("gdm_xdmcp_send_unwilling: Sending UNWILLING to %s", + inet_ntop (AF_INET6, + &(((struct sockaddr_in6 *)clnt_sa)->sin6_addr), + buffer6, INET6_ADDRSTRLEN)); gdm_error (_("Denied XDMCP query from host %s"), buffer6); } else #endif { - gdm_debug ("gdm_xdmcp_send_unwilling: Sending UNWILLING to %s", inet_ntoa (((struct sockaddr_in *)clnt_sa)->sin_addr)); + gdm_debug ("gdm_xdmcp_send_unwilling: Sending UNWILLING to %s", + inet_ntoa (((struct sockaddr_in *)clnt_sa)->sin_addr)); - gdm_error (_("Denied XDMCP query from host %s"), inet_ntoa (((struct sockaddr_in *)clnt_sa)->sin_addr)); + gdm_error (_("Denied XDMCP query from host %s"), + inet_ntoa (((struct sockaddr_in *)clnt_sa)->sin_addr)); } - /* Don't translate, this goes over the wire to servers where we - * don't know the charset or language, so it must be ascii */ + /* + * Don't translate, this goes over the wire to servers where we + * don't know the charset or language, so it must be ascii + */ status.data = (CARD8 *) "Display not authorized to connect"; status.length = strlen ((char *) status.data); @@ -1371,12 +1523,18 @@ gdm_xdmcp_send_unwilling (struct sockaddr_in *clnt_sa, gint type) XdmcpWriteARRAY8 (&buf, &status); #ifdef ENABLE_IPV6 if (clnt_sa->ss_family == AF_INET6) { - XdmcpFlush (gdm_xdmcpfd, &buf, (XdmcpNetaddr)clnt_sa, (int)sizeof (struct sockaddr_in6)); + XdmcpFlush (gdm_xdmcpfd, + &buf, + (XdmcpNetaddr)clnt_sa, + (int)sizeof (struct sockaddr_in6)); } else #endif { - XdmcpFlush (gdm_xdmcpfd, &buf, (XdmcpNetaddr)clnt_sa, (int)sizeof (struct sockaddr_in)); + XdmcpFlush (gdm_xdmcpfd, + &buf, + (XdmcpNetaddr)clnt_sa, + (int)sizeof (struct sockaddr_in)); } last_time = time (NULL); @@ -1403,11 +1561,15 @@ gdm_xdmcp_really_send_managed_forward (struct sockaddr_in *clnt_sa, gdm_debug ("gdm_xdmcp_really_send_managed_forward: " "Sending MANAGED_FORWARD to %s", - inet_ntop (AF_INET6, &(((struct sockaddr_in6 *)clnt_sa)->sin6_addr), buffer6, INET6_ADDRSTRLEN)); + inet_ntop (AF_INET6, + &(((struct sockaddr_in6 *)clnt_sa)->sin6_addr), + buffer6, INET6_ADDRSTRLEN)); address.length = sizeof (struct in6_addr); address.data = (void *)&addr6; - memcpy (address.data, &(((struct sockaddr_in6 *)origin)->sin6_addr), sizeof (struct in6_addr)); + memcpy (address.data, + &(((struct sockaddr_in6 *)origin)->sin6_addr), + sizeof (struct in6_addr)); } else #endif @@ -1418,7 +1580,9 @@ gdm_xdmcp_really_send_managed_forward (struct sockaddr_in *clnt_sa, address.length = sizeof (struct in_addr); address.data = (void *)&addr; - memcpy (address.data, &(((struct sockaddr_in *)origin)->sin_addr), sizeof (struct in_addr)); + memcpy (address.data, + &(((struct sockaddr_in *)origin)->sin_addr), + sizeof (struct in_addr)); } header.opcode = (CARD16) GDM_XDMCP_MANAGED_FORWARD; @@ -1429,12 +1593,18 @@ gdm_xdmcp_really_send_managed_forward (struct sockaddr_in *clnt_sa, XdmcpWriteARRAY8 (&buf, &address); #ifdef ENABLE_IPV6 if (clnt_sa->ss_family == AF_INET6) { - XdmcpFlush (gdm_xdmcpfd, &buf, (XdmcpNetaddr)clnt_sa, (int)sizeof (struct sockaddr_in6)); + XdmcpFlush (gdm_xdmcpfd, + &buf, + (XdmcpNetaddr)clnt_sa, + (int)sizeof (struct sockaddr_in6)); } else #endif { - XdmcpFlush (gdm_xdmcpfd, &buf, (XdmcpNetaddr)clnt_sa, (int)sizeof (struct sockaddr_in)); + XdmcpFlush (gdm_xdmcpfd, + &buf, + (XdmcpNetaddr)clnt_sa, + (int)sizeof (struct sockaddr_in)); } } @@ -1499,7 +1669,9 @@ gdm_xdmcp_send_got_managed_forward6 (struct sockaddr_in6 *clnt_sa, gdm_debug ("gdm_xdmcp_send_managed_forward: " "Sending GOT_MANAGED_FORWARD to %s", - inet_ntop (AF_INET6, &clnt_sa->sin6_addr, buffer6, INET6_ADDRSTRLEN)); + inet_ntop (AF_INET6, + &clnt_sa->sin6_addr, + buffer6, INET6_ADDRSTRLEN)); address.length = sizeof (struct in6_addr); address.data = (void *)&addr; @@ -1567,7 +1739,9 @@ gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, gint len) #ifdef ENABLE_IPV6 char buffer6[INET6_ADDRSTRLEN]; - inet_ntop (AF_INET6, &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, buffer6, INET6_ADDRSTRLEN); + inet_ntop (AF_INET6, + &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, + buffer6, INET6_ADDRSTRLEN); if (clnt_sa->ss_family == AF_INET6) { gdm_debug ("gdm_xdmcp_handle_request: Got REQUEST from %s",buffer6); @@ -1585,7 +1759,9 @@ gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, gint len) if (clnt_sa->ss_family == AF_INET6) { gdm_error (_("%s: Got REQUEST from banned host %s"), "gdm_xdmcp_handle_request", - inet_ntop (AF_INET6, &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, buffer6, INET6_ADDRSTRLEN)); + inet_ntop (AF_INET6, + &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, + buffer6, INET6_ADDRSTRLEN)); } else #endif @@ -1655,7 +1831,8 @@ gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, gint len) /* libXdmcp doesn't terminate strings properly so we cheat and use strncmp () */ for (i = 0 ; i < clnt_authorization.length ; i++) if (clnt_authorization.data[i].length == 18 && - strncmp ((char *) clnt_authorization.data[i].data, "MIT-MAGIC-COOKIE-1", 18) == 0) + strncmp ((char *) clnt_authorization.data[i].data, + "MIT-MAGIC-COOKIE-1", 18) == 0) mitauth = TRUE; /* Manufacturer ID */ @@ -1688,7 +1865,9 @@ gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, gint len) if (clnt_sa->ss_family == AF_INET6) { gdm_error (_("%s: Failed checksum from %s"), "gdm_xdmcp_handle_request", - inet_ntop (AF_INET6, &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, buffer6, INET6_ADDRSTRLEN)); + inet_ntop (AF_INET6, + &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, + buffer6, INET6_ADDRSTRLEN)); } else #endif @@ -1710,7 +1889,8 @@ gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, gint len) if G_UNLIKELY (gdm_get_value_bool (GDM_KEY_DEBUG)) { char *s = g_strndup ((char *) clnt_manufacturer.data, clnt_manufacturer.length); gdm_debug ("gdm_xdmcp_handle_request: xdmcp_pending=%d, MaxPending=%d, xdmcp_sessions=%d, MaxSessions=%d, ManufacturerID=%s", - xdmcp_pending, maxpending, xdmcp_sessions, maxsessions, ve_sure_string (s)); + xdmcp_pending, maxpending, xdmcp_sessions, + maxsessions, ve_sure_string (s)); g_free (s); } @@ -1719,7 +1899,8 @@ gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, gint len) if (clnt_sa->ss_family == AF_INET6) { if (mitauth && xdmcp_sessions < maxsessions && - (gdm_is_local_addr6 (&((struct sockaddr_in6 *)clnt_sa)->sin6_addr) || gdm_xdmcp_displays_from_host (clnt_sa) < dispperhost)) + (gdm_is_local_addr6 (&((struct sockaddr_in6 *)clnt_sa)->sin6_addr) || + gdm_xdmcp_displays_from_host (clnt_sa) < dispperhost)) entered = TRUE; } else @@ -1757,16 +1938,19 @@ gdm_xdmcp_handle_request (struct sockaddr_in *clnt_sa, gint len) gdm_xdmcp_send_decline (clnt_sa, "Only MIT-MAGIC-COOKIE-1 supported"); } else if (xdmcp_sessions >= maxsessions) { gdm_info ("Maximum number of open XDMCP sessions reached"); - gdm_xdmcp_send_decline (clnt_sa, "Maximum number of open sessions reached"); + gdm_xdmcp_send_decline (clnt_sa, + "Maximum number of open sessions reached"); } else { #ifdef ENABLE_IPV6 if (clnt_sa->ss_family == AF_INET6) - gdm_info ("Maximum number of open XDMCP sessions from host %s reached", buffer6); + gdm_info ("Maximum number of open XDMCP sessions from host %s reached", + buffer6); else #endif gdm_info ("Maximum number of open XDMCP sessions from host %s reached", inet_ntoa (((struct sockaddr_in *)clnt_sa)->sin_addr)); - gdm_xdmcp_send_decline (clnt_sa, "Maximum number of open sessions from your host reached"); + gdm_xdmcp_send_decline (clnt_sa, + "Maximum number of open sessions from your host reached"); } } @@ -1799,28 +1983,27 @@ gdm_xdmcp_send_accept (GdmHostent *he /* eaten and freed */, he /* eaten and freed */, displaynum); - authentype.data = (CARD8 *) 0; - authentype.length = (CARD16) 0; + authentype.data = (CARD8 *) 0; + authentype.length = (CARD16) 0; - authendata.data = (CARD8 *) 0; - authendata.length = (CARD16) 0; + authendata.data = (CARD8 *) 0; + authendata.length = (CARD16) 0; - authname.data = (CARD8 *) "MIT-MAGIC-COOKIE-1"; - authname.length = strlen ((char *) authname.data); + authname.data = (CARD8 *) "MIT-MAGIC-COOKIE-1"; + authname.length = strlen ((char *) authname.data); - authdata.data = (CARD8 *) d->bcookie; - authdata.length = 16; + authdata.data = (CARD8 *) d->bcookie; + authdata.length = 16; - header.version = XDM_PROTOCOL_VERSION; - header.opcode = (CARD16) ACCEPT; - header.length = 4; - header.length += 2 + authentype.length; - header.length += 2 + authendata.length; - header.length += 2 + authname.length; - header.length += 2 + authdata.length; + header.version = XDM_PROTOCOL_VERSION; + header.opcode = (CARD16) ACCEPT; + header.length = 4; + header.length += 2 + authentype.length; + header.length += 2 + authendata.length; + header.length += 2 + authname.length; + header.length += 2 + authdata.length; XdmcpWriteHeader (&buf, &header); - XdmcpWriteCARD32 (&buf, d->sessionid); XdmcpWriteARRAY8 (&buf, &authentype); XdmcpWriteARRAY8 (&buf, &authendata); @@ -1833,7 +2016,10 @@ gdm_xdmcp_send_accept (GdmHostent *he /* eaten and freed */, XdmcpFlush (gdm_xdmcpfd, &buf, (XdmcpNetaddr)clnt_sa, (int)sizeof (struct sockaddr_in6)); - gdm_debug ("gdm_xdmcp_send_accept: Sending ACCEPT to %s with SessionID=%ld", inet_ntop (AF_INET6, &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, buffer6, INET6_ADDRSTRLEN), (long)d->sessionid); + gdm_debug ("gdm_xdmcp_send_accept: Sending ACCEPT to %s with SessionID=%ld", + inet_ntop (AF_INET6, + &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, + buffer6, INET6_ADDRSTRLEN), (long)d->sessionid); } else #endif @@ -1866,7 +2052,9 @@ gdm_xdmcp_send_decline (struct sockaddr_in *clnt_sa, const char *reason) char buffer6[INET6_ADDRSTRLEN]; gdm_debug ("gdm_xdmcp_send_decline: Sending DECLINE to %s", - inet_ntop (AF_INET6, &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, buffer6, INET6_ADDRSTRLEN)); + inet_ntop (AF_INET6, + &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, + buffer6, INET6_ADDRSTRLEN)); } else #endif @@ -1876,22 +2064,22 @@ gdm_xdmcp_send_decline (struct sockaddr_in *clnt_sa, const char *reason) } - authentype.data = (CARD8 *) 0; - authentype.length = (CARD16) 0; + authentype.data = (CARD8 *) 0; + authentype.length = (CARD16) 0; - authendata.data = (CARD8 *) 0; - authendata.length = (CARD16) 0; + authendata.data = (CARD8 *) 0; + authendata.length = (CARD16) 0; - status.data = (CARD8 *) reason; - status.length = strlen ((char *) status.data); + status.data = (CARD8 *) reason; + status.length = strlen ((char *) status.data); - header.version = XDM_PROTOCOL_VERSION; - header.opcode = (CARD16) DECLINE; - header.length = 2 + status.length; - header.length += 2 + authentype.length; - header.length += 2 + authendata.length; + header.version = XDM_PROTOCOL_VERSION; + header.opcode = (CARD16) DECLINE; + header.length = 2 + status.length; + header.length += 2 + authentype.length; + header.length += 2 + authendata.length; + XdmcpWriteHeader (&buf, &header); - XdmcpWriteARRAY8 (&buf, &status); XdmcpWriteARRAY8 (&buf, &authentype); XdmcpWriteARRAY8 (&buf, &authendata); @@ -1935,7 +2123,8 @@ gdm_xdmcp_handle_manage (struct sockaddr_in *clnt_sa, gint len) #ifdef ENABLE_IPV6 char buffer6[INET6_ADDRSTRLEN]; - inet_ntop (AF_INET6, &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, buffer6, INET6_ADDRSTRLEN); + inet_ntop (AF_INET6, &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, + buffer6, INET6_ADDRSTRLEN); if (clnt_sa->ss_family == AF_INET6) { gdm_debug ("gdm_xdmcp_handle_manage: Got MANAGE from %s", buffer6); @@ -1943,7 +2132,8 @@ gdm_xdmcp_handle_manage (struct sockaddr_in *clnt_sa, gint len) else #endif { - gdm_debug ("gdm_xdmcp_handle_manage: Got MANAGE from %s", inet_ntoa (((struct sockaddr_in *)clnt_sa)->sin_addr)); + gdm_debug ("gdm_xdmcp_handle_manage: Got MANAGE from %s", + inet_ntoa (((struct sockaddr_in *)clnt_sa)->sin_addr)); } @@ -1992,11 +2182,13 @@ gdm_xdmcp_handle_manage (struct sockaddr_in *clnt_sa, gint len) #ifdef ENABLE_IPV6 if (clnt_sa->ss_family == AF_INET6) - gdm_debug ("gdm_xdmcp-handle_manage: Got display=%d, SessionID=%ld Class=%s from %s", (int)clnt_dspnum, (long)clnt_sessid, ve_sure_string (s), buffer6); + gdm_debug ("gdm_xdmcp-handle_manage: Got display=%d, SessionID=%ld Class=%s from %s", + (int)clnt_dspnum, (long)clnt_sessid, ve_sure_string (s), buffer6); else #endif gdm_debug ("gdm_xdmcp_handle_manage: Got Display=%d, SessionID=%ld Class=%s from %s", - (int)clnt_dspnum, (long)clnt_sessid, ve_sure_string (s), inet_ntoa (((struct sockaddr_in *)clnt_sa)->sin_addr)); + (int)clnt_dspnum, (long)clnt_sessid, ve_sure_string (s), + inet_ntoa (((struct sockaddr_in *)clnt_sa)->sin_addr)); g_free (s); } @@ -2073,7 +2265,8 @@ gdm_xdmcp_handle_managed_forward (struct sockaddr_in *clnt_sa, gint len) #ifdef ENABLE_IPV6 char buffer6[INET6_ADDRSTRLEN]; - inet_ntop (AF_INET6, &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, buffer6, INET6_ADDRSTRLEN); + inet_ntop (AF_INET6, &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, + buffer6, INET6_ADDRSTRLEN); if (clnt_sa->ss_family == AF_INET6) { gdm_debug ("gdm_xdmcp_handle_managed_forward: " @@ -2081,7 +2274,8 @@ gdm_xdmcp_handle_managed_forward (struct sockaddr_in *clnt_sa, gint len) buffer6); /* Check with tcp_wrappers if client is allowed to access */ if (! gdm_xdmcp_host_allow (clnt_sa)) { - gdm_error ("%s: Got MANAGED_FORWARD from banned host %s", "gdm_xdmcp_handle_request", buffer6); + gdm_error ("%s: Got MANAGED_FORWARD from banned host %s", + "gdm_xdmcp_handle_request", buffer6); return; } } @@ -2140,12 +2334,14 @@ gdm_xdmcp_handle_managed_forward (struct sockaddr_in *clnt_sa, gint len) * didn't get through and this was a second managed forward */ #ifdef ENABLE_IPV6 if (clnt_sa->ss_family == AF_INET6) { - gdm_xdmcp_send_got_managed_forward6 ((struct sockaddr_in6 *)clnt_sa, (struct in6_addr *)clnt_address.data); + gdm_xdmcp_send_got_managed_forward6 ((struct sockaddr_in6 *)clnt_sa, + (struct in6_addr *)clnt_address.data); } else #endif { - gdm_xdmcp_send_got_managed_forward ((struct sockaddr_in *)clnt_sa, (struct in_addr *)clnt_address.data); + gdm_xdmcp_send_got_managed_forward ((struct sockaddr_in *)clnt_sa, + (struct in_addr *)clnt_address.data); } XdmcpDisposeARRAY8 (&clnt_address); @@ -2161,8 +2357,11 @@ gdm_xdmcp_whack_queued_managed_forwards6 (struct sockaddr_in6 *clnt_sa, for (li = managed_forwards; li != NULL; li = li->next) { ManagedForward *mf = li->data; - if ((memcmp (((struct sockaddr_in6 *)(&(mf->manager)))->sin6_addr.s6_addr, (clnt_sa->sin6_addr.s6_addr), sizeof (struct in6_addr)) == 0) && - (memcmp (((struct sockaddr_in6 *)(&(mf->origin)))->sin6_addr.s6_addr, origin->s6_addr, sizeof (struct in6_addr)) == 0)) { + if ((memcmp (((struct sockaddr_in6 *)(&(mf->manager)))->sin6_addr.s6_addr, + (clnt_sa->sin6_addr.s6_addr), sizeof (struct in6_addr)) == 0) && + (memcmp (((struct sockaddr_in6 *)(&(mf->origin)))->sin6_addr.s6_addr, + origin->s6_addr, sizeof (struct in6_addr)) == 0)) { + managed_forwards = g_slist_remove_link (managed_forwards, li); g_slist_free_1 (li); g_source_remove (mf->handler); @@ -2208,9 +2407,12 @@ gdm_xdmcp_handle_got_managed_forward (struct sockaddr_in *clnt_sa, gint len) if (clnt_sa->ss_family == AF_INET6) { gdm_debug ("gdm_xdmcp_handle_got_managed_forward: " "Got MANAGED_FORWARD from %s", - inet_ntop (AF_INET6, &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, buffer6, INET6_ADDRSTRLEN)); + inet_ntop (AF_INET6, + &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, + buffer6, INET6_ADDRSTRLEN)); if (! gdm_xdmcp_host_allow (clnt_sa)) { - gdm_error ("%s: Got GOT_MANAGED_FORWARD from banned host %s", "gdm_xdmcp_handle_request", buffer6); + gdm_error ("%s: Got GOT_MANAGED_FORWARD from banned host %s", + "gdm_xdmcp_handle_request", buffer6); return; } } @@ -2245,7 +2447,8 @@ gdm_xdmcp_handle_got_managed_forward (struct sockaddr_in *clnt_sa, gint len) return; } - gdm_xdmcp_whack_queued_managed_forwards6 ((struct sockaddr_in6 *)clnt_sa, (struct in6_addr *)clnt_address.data); + gdm_xdmcp_whack_queued_managed_forwards6 ((struct sockaddr_in6 *)clnt_sa, + (struct in6_addr *)clnt_address.data); } else #endif @@ -2256,7 +2459,8 @@ gdm_xdmcp_handle_got_managed_forward (struct sockaddr_in *clnt_sa, gint len) XdmcpDisposeARRAY8 (&clnt_address); return; } - gdm_xdmcp_whack_queued_managed_forwards ((struct sockaddr_in *)clnt_sa, (struct in_addr *)clnt_address.data); + gdm_xdmcp_whack_queued_managed_forwards ((struct sockaddr_in *)clnt_sa, + (struct in_addr *)clnt_address.data); } XdmcpDisposeARRAY8 (&clnt_address); @@ -2273,14 +2477,16 @@ gdm_xdmcp_send_refuse (struct sockaddr_in *clnt_sa, CARD32 sessid) XdmcpHeader header; GdmForwardQuery *fq; - gdm_debug ("gdm_xdmcp_send_refuse: Sending REFUSE to %ld", (long)sessid); + gdm_debug ("gdm_xdmcp_send_refuse: Sending REFUSE to %ld", + (long)sessid); header.version = XDM_PROTOCOL_VERSION; - header.opcode= (CARD16) REFUSE; - header.length = 4; + header.opcode = (CARD16) REFUSE; + header.length = 4; XdmcpWriteHeader (&buf, &header); XdmcpWriteCARD32 (&buf, sessid); + #ifdef ENABLE_IPV6 if (clnt_sa->ss_family == AF_INET6) { XdmcpFlush (gdm_xdmcpfd, &buf, (XdmcpNetaddr)clnt_sa, @@ -2293,8 +2499,10 @@ gdm_xdmcp_send_refuse (struct sockaddr_in *clnt_sa, CARD32 sessid) (int)sizeof (struct sockaddr_in)); } - /* this was from a forwarded query quite apparently so - * send MANAGED_FORWARD */ + /* + * This was from a forwarded query quite apparently so + * send MANAGED_FORWARD + */ fq = gdm_forward_query_lookup (clnt_sa); if (fq != NULL) { gdm_xdmcp_send_managed_forward (fq->from_sa, clnt_sa); @@ -2315,18 +2523,21 @@ gdm_xdmcp_send_failed (struct sockaddr_in *clnt_sa, CARD32 sessid) gdm_debug ("gdm_xdmcp_send_failed: Sending FAILED to %ld", (long)sessid); - /* Don't translate, this goes over the wire to servers where we - * don't know the charset or language, so it must be ascii */ - status.data = (CARD8 *) "Failed to start session"; - status.length = strlen ((char *) status.data); + /* + * Don't translate, this goes over the wire to servers where we + * don't know the charset or language, so it must be ascii + */ + status.data = (CARD8 *) "Failed to start session"; + status.length = strlen ((char *) status.data); header.version = XDM_PROTOCOL_VERSION; - header.opcode = (CARD16) FAILED; - header.length = 6+status.length; + header.opcode = (CARD16) FAILED; + header.length = 6+status.length; XdmcpWriteHeader (&buf, &header); XdmcpWriteCARD32 (&buf, sessid); XdmcpWriteARRAY8 (&buf, &status); + #ifdef ENABLE_IPV6 if (clnt_sa->ss_family == AF_INET6) { XdmcpFlush (gdm_xdmcpfd, &buf, (XdmcpNetaddr)clnt_sa, @@ -2338,10 +2549,8 @@ gdm_xdmcp_send_failed (struct sockaddr_in *clnt_sa, CARD32 sessid) XdmcpFlush (gdm_xdmcpfd, &buf, (XdmcpNetaddr)clnt_sa, (int)sizeof (struct sockaddr_in)); } - } - static void #ifdef ENABLE_IPV6 gdm_xdmcp_handle_keepalive (struct sockaddr_storage *clnt_sa, gint len) @@ -2357,7 +2566,8 @@ gdm_xdmcp_handle_keepalive (struct sockaddr_in *clnt_sa, gint len) if (clnt_sa->ss_family == AF_INET6) { gdm_debug ("gdm_xdmcp_handle_keepalive: Got KEEPALIVE from %s", - inet_ntop (AF_INET6, &(((struct sockaddr_in6 *)clnt_sa)->sin6_addr), + inet_ntop (AF_INET6, + &(((struct sockaddr_in6 *)clnt_sa)->sin6_addr), buffer6, INET6_ADDRSTRLEN)); /* Check with tcp_wrappers if client is allowed to access */ @@ -2403,9 +2613,11 @@ buffer6, INET6_ADDRSTRLEN)); static void #ifdef ENABLE_IPV6 -gdm_xdmcp_send_alive (struct sockaddr_storage *clnt_sa, CARD16 dspnum, CARD32 sessid) +gdm_xdmcp_send_alive (struct sockaddr_storage *clnt_sa, + CARD16 dspnum, CARD32 sessid) #else -gdm_xdmcp_send_alive (struct sockaddr_in *clnt_sa, CARD16 dspnum, CARD32 sessid) +gdm_xdmcp_send_alive (struct sockaddr_in *clnt_sa, + CARD16 dspnum, CARD32 sessid) #endif { XdmcpHeader header; @@ -2458,10 +2670,12 @@ gdm_xdmcp_host_allow ( { #ifdef HAVE_TCPWRAPPERS - /* avoids a warning, my tcpd.h file doesn't include this prototype, even + /* + * Avoids a warning, my tcpd.h file doesn't include this prototype, even * though the library does include the function and the manpage mentions it */ - extern int hosts_ctl (char *daemon, char *client_name, char *client_addr, char *client_user); + extern int hosts_ctl (char *daemon, char *client_name, + char *client_addr, char *client_user); GdmHostent *client_he; char *client; @@ -2470,19 +2684,23 @@ gdm_xdmcp_host_allow ( /* Find client hostname */ client_he = gdm_gethostbyaddr (clnt_sa); - if (client_he->not_found) + if (client_he->not_found) { client = "unknown"; - else { - gdm_debug ("gdm_xdmcp_host_allow: client->hostname is %s\n", client_he->hostname); + } else { + gdm_debug ("gdm_xdmcp_host_allow: client->hostname is %s\n", + client_he->hostname); client = client_he->hostname; - } + } /* Check with tcp_wrappers if client is allowed to access */ #ifdef ENABLE_IPV6 if (clnt_sa->ss_family == AF_INET6) { char buffer6[INET6_ADDRSTRLEN]; - ret = (hosts_ctl ("gdm", client, (char *) inet_ntop (AF_INET6, &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, buffer6, INET6_ADDRSTRLEN), "")); + ret = (hosts_ctl ("gdm", client, + (char *) inet_ntop (AF_INET6, + &((struct sockaddr_in6 *)clnt_sa)->sin6_addr, + buffer6, INET6_ADDRSTRLEN), "")); } else #endif { @@ -2508,7 +2726,7 @@ gdm_xdmcp_display_alloc ( GdmHostent *he /* eaten and freed */, int displaynum) { - GdmDisplay *d = NULL; + GdmDisplay *d = NULL; char *proxycmd = gdm_get_value_string (GDM_KEY_XDMCP_PROXY_XSERVER); d = g_new0 (GdmDisplay, 1); @@ -2521,35 +2739,34 @@ gdm_xdmcp_display_alloc ( d->type = TYPE_XDMCP; } - d->logout_action = GDM_LOGOUT_ACTION_NONE; - d->authfile = NULL; - d->auths = NULL; - d->userauth = NULL; - d->greetpid = 0; - d->servpid = 0; - d->servstat = 0; - d->sesspid = 0; - d->slavepid = 0; - d->attached = FALSE; - d->dispstat = XDMCP_PENDING; - d->sessionid = globsessid++; + d->logout_action = GDM_LOGOUT_ACTION_NONE; + d->authfile = NULL; + d->auths = NULL; + d->userauth = NULL; + d->greetpid = 0; + d->servpid = 0; + d->servstat = 0; + d->sesspid = 0; + d->slavepid = 0; + d->attached = FALSE; + d->dispstat = XDMCP_PENDING; + d->sessionid = globsessid++; + if (d->sessionid == 0) d->sessionid = globsessid++; - d->acctime = time (NULL); - d->dispnum = displaynum; - d->xdmcp_dispnum = displaynum; - - d->handled = TRUE; - d->tcp_disallowed = FALSE; - - d->vt = -1; - - d->x_servers_order = -1; - d->logged_in = FALSE; - d->login = NULL; + d->acctime = time (NULL); + d->dispnum = displaynum; + d->xdmcp_dispnum = displaynum; + d->handled = TRUE; + d->tcp_disallowed = FALSE; + d->vt = -1; + d->x_servers_order = -1; + d->logged_in = FALSE; + d->login = NULL; d->sleep_before_run = 0; + if (gdm_get_value_bool (GDM_KEY_ALLOW_REMOTE_AUTOLOGIN) && ! ve_string_empty (gdm_get_value_string (GDM_KEY_TIMED_LOGIN))) { d->timed_login_ok = TRUE; @@ -2561,57 +2778,57 @@ gdm_xdmcp_display_alloc ( displaynum); #ifdef ENABLE_IPV6 if (addr->ss_family == AF_INET6) { - memcpy (&d->addr6, &((struct sockaddr_in6 *)addr)->sin6_addr, sizeof (struct in6_addr)); + memcpy (&d->addr6, + &((struct sockaddr_in6 *)addr)->sin6_addr, + sizeof (struct in6_addr)); d->addrtype = AF_INET6; } else #endif { - memcpy (&d->addr, &((struct sockaddr_in *)addr)->sin_addr, sizeof (struct in_addr)); + memcpy (&d->addr, + &((struct sockaddr_in *)addr)->sin_addr, + sizeof (struct in_addr)); d->addrtype = AF_INET; } - d->hostname = he->hostname; - he->hostname = NULL; - d->addrs = he->addrs; - he->addrs = NULL; - d->addr_count = he->addr_count; - he->addr_count = 0; + d->hostname = he->hostname; + he->hostname = NULL; + d->addrs = he->addrs; + he->addrs = NULL; + d->addr_count = he->addr_count; + he->addr_count = 0; gdm_hostent_free (he); - d->slave_notify_fd = -1; - d->master_notify_fd = -1; - + d->slave_notify_fd = -1; + d->master_notify_fd = -1; d->xsession_errors_bytes = 0; - d->xsession_errors_fd = -1; - d->session_output_fd = -1; - - d->chooser_output_fd = -1; - d->chooser_last_line = NULL; - - d->theme_name = NULL; + d->xsession_errors_fd = -1; + d->session_output_fd = -1; + d->chooser_output_fd = -1; + d->chooser_last_line = NULL; + d->theme_name = NULL; /* Secure display with cookie */ if G_UNLIKELY (! gdm_auth_secure_display (d)) - gdm_error ("gdm_xdmcp_display_alloc: Error setting up cookies for %s", d->name); + gdm_error ("gdm_xdmcp_display_alloc: Error setting up cookies for %s", + d->name); if (d->type == TYPE_XDMCP_PROXY) { - d->parent_disp = d->name; - d->name = g_strdup (":-1"); - d->dispnum = -1; - - d->server_uid = gdm_get_gdmuid (); - + d->parent_disp = d->name; + d->name = g_strdup (":-1"); + d->dispnum = -1; + d->server_uid = gdm_get_gdmuid (); d->parent_auth_file = d->authfile; - d->authfile = NULL; + d->authfile = NULL; } displays = g_slist_append (displays, d); xdmcp_pending++; - gdm_debug ("gdm_xdmcp_display_alloc: display=%s, session id=%ld, xdmcp_pending=%d ", + gdm_debug ("gdm_xdmcp_display_alloc: display=%s, session id=%ld, xdmcp_pending=%d", d->name, (long)d->sessionid, xdmcp_pending); return d; @@ -2672,7 +2889,6 @@ gdm_xdmcp_display_dispose_check (const gchar *hostname, int dspnum) } } - static void gdm_xdmcp_displays_check (void) { diff --git a/gui/gdmXnestchooser.c b/gui/gdmXnestchooser.c index 092eea9d..3a95f173 100644 --- a/gui/gdmXnestchooser.c +++ b/gui/gdmXnestchooser.c @@ -168,7 +168,7 @@ static const GOptionEntry xnest_only_options[] = { { "xnest", 'x', 0, G_OPTION_ARG_STRING, &xnest_binary, N_("Xnest command line"), N_("STRING") }, { "xnest-extra-options", 'o', 0, G_OPTION_ARG_STRING, &xnest_options, N_("Extra options for Xnest"), N_("OPTIONS") }, { "background", 'b', 0, G_OPTION_ARG_NONE, &background, N_("Run in background"), NULL }, - { G_OPTION_REMAINING, NULL, 0, G_OPTION_ARG_STRING_ARRAY, &args_remaining, NULL, NULL }, + { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &args_remaining, NULL, NULL }, { NULL } }; @@ -180,7 +180,7 @@ static const GOptionEntry options[] = { { "broadcast", 'B', 0, G_OPTION_ARG_NONE, &do_broadcast, N_("Run broadcast instead of indirect (chooser)"), NULL }, { "background", 'b', 0, G_OPTION_ARG_NONE, &background, N_("Run in background"), NULL }, { "no-gdm-check", '\0', 0, G_OPTION_ARG_NONE, &no_gdm_check, N_("Don't check for running GDM"), NULL }, - { G_OPTION_REMAINING, NULL, 0, G_OPTION_ARG_STRING_ARRAY, &args_remaining, NULL, NULL }, + { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &args_remaining, NULL, NULL }, { NULL } }; diff --git a/gui/gdmchooser.c b/gui/gdmchooser.c index 67eaed42..dc63df90 100644 --- a/gui/gdmchooser.c +++ b/gui/gdmchooser.c @@ -84,6 +84,7 @@ struct _GdmChooserHost { static const gchar *scanning_message = N_("Please wait: scanning local network..."); static const gchar *empty_network = N_("No serving hosts were found."); static const gchar *active_network = N_("Choose a ho_st to connect to:"); +static void gdm_chooser_cancel (/*void*/); /* XDM chooser style stuff */ static gchar *xdm_address = NULL; @@ -91,7 +92,6 @@ static gchar *client_address = NULL; static gint connection_type = 0; /* Exported for glade */ -void gdm_chooser_cancel (/*void*/); void gdm_chooser_add_host (void); void gdm_chooser_add_entry_changed (void); void gdm_chooser_manage (GtkButton *button, gpointer data); @@ -1535,8 +1535,8 @@ gdm_chooser_add_entry_changed (void) gtk_widget_set_sensitive (add_button, ! ve_string_empty (name)); } -void -gdm_chooser_cancel (/*void*/) +static void +gdm_chooser_cancel (int sig) { if (scan_time_handler > 0) { g_source_remove (scan_time_handler); @@ -1905,7 +1905,7 @@ GOptionEntry chooser_options [] = { N_("Client address to return in response to xdm"), N_("ADDRESS") }, { "connectionType", '\0', 0, G_OPTION_ARG_INT, &connection_type, N_("Connection type to return in response to xdm"), N_("TYPE") }, - { G_OPTION_REMAINING, NULL, 0, G_OPTION_ARG_STRING_ARRAY, &chooser_hosts, + { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &chooser_hosts, NULL, NULL }, { NULL } }; diff --git a/gui/gdmconfig.c b/gui/gdmconfig.c index e8b1667f..24e222f6 100644 --- a/gui/gdmconfig.c +++ b/gui/gdmconfig.c @@ -618,7 +618,6 @@ gdm_config_get_bool (gchar *key) /** * gdm_config_reload_string - * gdm_config_reload_translated_string * gdm_config_reload_int * gdm_config_reload_bool * @@ -633,14 +632,6 @@ gdm_config_reload_string (gchar *key) return changed; } -static gboolean -gdm_config_reload_translated_string (gchar *key) -{ - gboolean changed; - _gdm_config_get_translated_string (key, TRUE, &changed); - return changed; -} - gboolean gdm_config_reload_int (gchar *key) { diff --git a/gui/greeter/greeter_canvas_item.c b/gui/greeter/greeter_canvas_item.c index 1a805430..543c7f4c 100644 --- a/gui/greeter/greeter_canvas_item.c +++ b/gui/greeter/greeter_canvas_item.c @@ -132,7 +132,7 @@ activate_button (GtkWidget *widget, gpointer data) greeter_item_run_action_callback (id); } -void +static void menubar_done (GtkMenuShell *menushell, gpointer data) { GreeterItemInfo *entry_info = greeter_lookup_id ("user-pw-entry"); diff --git a/gui/greeter/greeter_canvas_text.c b/gui/greeter/greeter_canvas_text.c index 8e5b81bb..961f5190 100644 --- a/gui/greeter/greeter_canvas_text.c +++ b/gui/greeter/greeter_canvas_text.c @@ -95,7 +95,7 @@ greeter_canvas_text_get_screen_dpi (GreeterCanvasText *text) 0, G_MAXINT, FALSE, &type, NULL, &resources_length, - (guchar **) &resources)) + (void *) &resources)) { gdk_error_trap_pop (); return default_dpi; diff --git a/gui/greeter/greeter_item_customlist.c b/gui/greeter/greeter_item_customlist.c index aee288fa..d4b2e39a 100644 --- a/gui/greeter/greeter_item_customlist.c +++ b/gui/greeter/greeter_item_customlist.c @@ -348,7 +348,7 @@ populate_language (GObject *object) } /* Callback helper function to set session value */ -void +static void combo_session_selected (char *session_val) { GList *tmp; diff --git a/gui/greeter/greeter_session.c b/gui/greeter/greeter_session.c index 91bc7066..2bc812a3 100644 --- a/gui/greeter/greeter_session.c +++ b/gui/greeter/greeter_session.c @@ -36,6 +36,7 @@ #include "greeter.h" #include "greeter_session.h" #include "greeter_item_pam.h" +#include "greeter_item_customlist.h" #include "greeter_configuration.h" #include "greeter_events.h" #include "greeter_parser.h" |