Hi Matthieu, I hate to be the bearer of bad tidings, but your latest changes to genauth.c on xf-4_3-branch did not build for me. I had to remove function prototypes that were duplicated in dm_auth.h when HASXDMAUTH is defined.
I also resynced with your latest PAM handling updates in session.c and continued making the C style consistent. The tree builds fine and xdm appears to work with these patches applied. Diff is attached, and is against xf-4_3-branch. -- G. Branden Robinson | Religion is regarded by the common Debian GNU/Linux | people as true, by the wise as [EMAIL PROTECTED] | false, and by the rulers as useful. http://people.debian.org/~branden/ | -- Lucius Annaeus Seneca
diff -urN xc/programs/xdm~/genauth.c xc/programs/xdm/genauth.c --- xc/programs/xdm~/genauth.c 2003-10-08 21:42:04.000000000 -0500 +++ xc/programs/xdm/genauth.c 2003-10-08 21:43:33.000000000 -0500 @@ -33,14 +33,16 @@ * Author: Keith Packard, MIT X Consortium */ -# include <X11/Xauth.h> -# include <X11/Xos.h> +#include <X11/Xauth.h> +#include <X11/Xos.h> -# include "dm.h" -# include "dm_auth.h" -# include "dm_error.h" +#include "dm.h" +#include "dm_auth.h" +#include "dm_error.h" #include <errno.h> +#include <fcntl.h> +#include <string.h> #include <time.h> #define Time_t time_t @@ -54,16 +56,6 @@ #endif #ifdef HASXDMAUTH - -typedef unsigned char auth_cblock[8]; /* block size */ - -typedef struct auth_ks_struct { auth_cblock _; } auth_wrapper_schedule[16]; - -extern int _XdmcpAuthSetup(unsigned char *, auth_wrapper_schedule); -extern int _XdmcpAuthDoIt(unsigned char *, unsigned char *, - auth_wrapper_schedule, int); -extern void _XdmcpWrapperToOddParity(unsigned char *, unsigned char *); - static void longtochars (long l, unsigned char *c) { @@ -72,7 +64,6 @@ c[2] = (l >> 8) & 0xff; c[3] = l & 0xff; } - #endif #ifdef POLL_DEV_RANDOM @@ -339,7 +330,7 @@ if ((offset = sumFile (randomFile, BSIZ, SEEK_SET, 0)) == BSIZ) return; } - LogError("Cannot read randomFile \"%s\"; X cookies may be easily guessable\n", randomFile); + LogError("cannot read randomFile \"%s\"; X cookies may be easily guessable\n", randomFile); } #endif /* !ARC4_RANDOM && !DEV_RANDOM */ @@ -372,7 +363,7 @@ close(fd); } } else { - LogError("Cannot open randomDevice \"%s\", errno = %d\n", + LogError("cannot open randomDevice \"%s\", errno = %d\n", randomDevice, errno); } #endif @@ -459,10 +450,10 @@ return 1; } close(fd); - LogError("Cannot read randomDevice \"%s\", errno=%d\n", + LogError("cannot read randomDevice \"%s\", errno=%d\n", randomDevice, errno); } else - LogError("Cannot open randomDevice \"%s\", errno = %d\n", + LogError("cannot open randomDevice \"%s\", errno = %d\n", randomDevice, errno); #endif /* DEV_RANDOM */ /* Try some pseudo-random number genrator daemon next */ diff -urN xc/programs/xdm~/session.c xc/programs/xdm/session.c --- xc/programs/xdm~/session.c 2003-10-07 18:06:53.000000000 -0500 +++ xc/programs/xdm/session.c 2003-10-07 18:24:12.000000000 -0500 @@ -54,7 +54,7 @@ #ifdef SECURE_RPC # include <rpc/rpc.h> # include <rpc/key_prot.h> -extern int key_setnet(struct key_netstarg *arg); +extern int key_setnet (struct key_netstarg *arg); #endif #ifdef K5AUTH # include <krb5/krb5.h> @@ -74,44 +74,44 @@ # include <grp.h> #else /* should be in <grp.h> */ -extern void setgrent(void); -extern struct group *getgrent(void); -extern void endgrent(void); +extern void setgrent (void); +extern struct group *getgrent (void); +extern void endgrent (void); #endif #ifdef USESHADOW # if defined(SVR4) # include <shadow.h> # else -extern struct spwd *getspnam(GETSPNAM_ARGS); -extern void endspent(void); +extern struct spwd *getspnam (GETSPNAM_ARGS); +extern void endspent (void); # endif #endif #if defined(CSRG_BASED) || defined(__GLIBC__) # include <pwd.h> # include <unistd.h> #else -extern struct passwd *getpwnam(GETPWNAM_ARGS); +extern struct passwd *getpwnam (GETPWNAM_ARGS); # ifdef linux -extern void endpwent(void); +extern void endpwent (void); # endif -extern char *crypt(CRYPT_ARGS); +extern char *crypt (CRYPT_ARGS); #endif #ifdef USE_PAM pam_handle_t ** -thepamhp(void) +thepamhp (void) { static pam_handle_t *pamh = NULL; return &pamh; } pam_handle_t * -thepamh(void) +thepamh (void) { pam_handle_t **pamhp; - pamhp = thepamhp(); + pamhp = thepamhp (); if (pamhp) return *pamhp; else @@ -158,7 +158,7 @@ #endif }; -static Bool StartClient( +static Bool StartClient ( struct verify_info *verify, struct display *d, int *pidp, @@ -253,18 +253,18 @@ static int IOErrorHandler (Display *dpy) { - LogError ("fatal IO error %d (%s)\n", errno, _SysErrorMsg(errno)); - exit(RESERVER_DISPLAY); + LogError ("fatal IO error %d (%s)\n", errno, _SysErrorMsg (errno)); + exit (RESERVER_DISPLAY); /*NOTREACHED*/ return 0; } static int -ErrorHandler(Display *dpy, XErrorEvent *event) +ErrorHandler (Display *dpy, XErrorEvent *event) { LogError ("X error\n"); if (XmuPrintDefaultErrorMessage (dpy, event, stderr) == 0) return 0; - exit(UNMANAGE_DISPLAY); + exit (UNMANAGE_DISPLAY); /*NOTREACHED*/ } @@ -280,12 +280,12 @@ #endif Debug ("ManageSession %s\n", d->name); - (void)XSetIOErrorHandler(IOErrorHandler); - (void)XSetErrorHandler(ErrorHandler); + (void) XSetIOErrorHandler (IOErrorHandler); + (void) XSetErrorHandler (ErrorHandler); #ifndef HAS_SETPROCTITLE - SetTitle(d->name, (char *) 0); + SetTitle (d->name, (char *) 0); #else - setproctitle("%s", d->name); + setproctitle ("%s", d->name); #endif /* * Load system default Resources @@ -296,12 +296,12 @@ greet_user_proc = GreetUser; #else Debug ("ManageSession: loading greeter library %s\n", greeterLib); - greet_lib_handle = dlopen(greeterLib, RTLD_NOW); + greet_lib_handle = dlopen (greeterLib, RTLD_NOW); if (greet_lib_handle != NULL) - greet_user_proc = (GreetUserProc)dlsym(greet_lib_handle, "GreetUser"); + greet_user_proc = (GreetUserProc) dlsym (greet_lib_handle, "GreetUser"); if (greet_user_proc == NULL) { - LogError ("%s while loading %s\n", dlerror(), greeterLib); - exit(UNMANAGE_DISPLAY); + LogError ("%s while loading %s\n", dlerror (), greeterLib); + exit (UNMANAGE_DISPLAY); } #endif @@ -321,11 +321,11 @@ * setting up environment and running the session */ if (StartClient (&verify, d, &clientPid, greet.name, greet.password)) { - Debug ("Client Started\n"); + Debug ("client started\n"); #ifndef GREET_USER_STATIC /* Save memory; close library */ - dlclose(greet_lib_handle); + dlclose (greet_lib_handle); #endif /* @@ -363,7 +363,7 @@ /* * run system-wide reset file */ - Debug ("Source reset program %s\n", d->reset); + Debug ("source reset program %s\n", d->reset); source (verify.systemEnviron, d->reset); SessionExit (d, OBEYSESS_DISPLAY, TRUE); } @@ -378,7 +378,7 @@ env = systemEnv (d, (char *) 0, (char *) 0); args = parseArgs ((char **) 0, d->xrdb); args = parseArgs (args, d->resources); - Debug ("Loading resource file: %s\n", d->resources); + Debug ("loading resource file: %s\n", d->resources); (void) runAndWait (args, env); freeArgs (args); freeEnv (env); @@ -402,12 +402,12 @@ DeleteXloginResources (struct display *d, Display *dpy) { int i; - Atom prop = XInternAtom(dpy, "SCREEN_RESOURCES", True); + Atom prop = XInternAtom (dpy, "SCREEN_RESOURCES", True); - XDeleteProperty(dpy, RootWindow (dpy, 0), XA_RESOURCE_MANAGER); + XDeleteProperty (dpy, RootWindow (dpy, 0), XA_RESOURCE_MANAGER); if (prop) { - for (i = ScreenCount(dpy); --i >= 0; ) - XDeleteProperty(dpy, RootWindow (dpy, i), prop); + for (i = ScreenCount (dpy); --i >= 0; ) + XDeleteProperty (dpy, RootWindow (dpy, i), prop); } } @@ -431,7 +431,7 @@ SessionExit (d, RESERVER_DISPLAY, FALSE); } (void) alarm ((unsigned) d->grabTimeout); - Debug ("Before XGrabServer %s\n", d->name); + Debug ("before XGrabServer %s\n", d->name); XGrabServer (dpy); if (XGrabKeyboard (dpy, DefaultRootWindow (dpy), True, GrabModeAsync, GrabModeAsync, CurrentTime) != GrabSuccess) { @@ -466,13 +466,13 @@ SessionExit (struct display *d, int status, int removeAuth) { #ifdef USE_PAM - pam_handle_t *pamh = thepamh(); + pam_handle_t *pamh = thepamh (); #endif #ifdef USE_PAM if (pamh) { /* shutdown PAM session */ - pam_close_session(pamh, 0); - pam_end(pamh, PAM_SUCCESS); + pam_close_session (pamh, 0); + pam_end (pamh, PAM_SUCCESS); pamh = NULL; } #endif @@ -492,26 +492,26 @@ krb5_error_code code; krb5_ccache ccache; - code = Krb5DisplayCCache(d->name, &ccache); + code = Krb5DisplayCCache (d->name, &ccache); if (code) LogError ("%s while getting Krb5 ccache to destroy\n", - error_message(code)); + error_message (code)); else { - code = krb5_cc_destroy(ccache); + code = krb5_cc_destroy (ccache); if (code) { if (code == KRB5_FCC_NOFILE) { - Debug ("No Kerberos ccache file found to destroy\n"); + Debug ("no Kerberos ccache file found to destroy\n"); } else LogError ("%s while destroying Krb5 credentials cache\n", - error_message(code)); + error_message (code)); } else Debug ("Kerberos ccache destroyed\n"); - krb5_cc_close(ccache); + krb5_cc_close (ccache); } } #endif /* K5AUTH */ } - Debug ("Display %s exiting with status %d\n", d->name, status); + Debug ("display %s exiting with status %d\n", d->name, status); exit (status); } @@ -546,14 +546,14 @@ Debug ("\n"); } #ifdef USE_PAM - if (pamh) pam_open_session(pamh, 0); + if (pamh) pam_open_session (pamh, 0); #endif switch (pid = fork ()) { case 0: CleanUpChild (); #ifdef XDMCP /* The chooser socket is not closed by CleanUpChild() */ - DestroyWellKnownSockets(); + DestroyWellKnownSockets (); #endif /* Do system-dependent login setup here */ @@ -562,9 +562,9 @@ /* pass in environment variables set by libpam and modules it called */ if (pamh) { long i; - char **pam_env = pam_getenvlist(pamh); - for(i = 0; pam_env && pam_env[i]; i++) { - verify->userEnviron = putEnv(pam_env[i], verify->userEnviron); + char **pam_env = pam_getenvlist (pamh); + for (i = 0; pam_env && pam_env[i]; i++) { + verify->userEnviron = putEnv (pam_env[i], verify->userEnviron); } } #endif @@ -572,36 +572,38 @@ #ifndef AIXV3 #ifndef HAS_SETUSERCONTEXT - if (setgid(verify->gid) < 0) { - LogError ("setgid %d (user \"%s\") failed, errno=%d\n", - verify->gid, name, errno); + if (setgid (verify->gid) < 0) { + LogError ("setgid %d (user \"%s\") failed: %s\n", + verify->gid, name, _SysErrorMsg (errno)); return (0); } #if defined(BSD) && (BSD >= 199103) - if (setlogin(name) < 0) { - LogError ("setlogin for \"%s\" failed, errno=%d", name, errno); - return(0); + if (setlogin (name) < 0) { + LogError ("setlogin for \"%s\" failed: %s\n", name, + _SysErrorMsg (errno)); + return (0); } #endif #ifndef QNX4 - if (initgroups(name, verify->gid) < 0) { - LogError ("initgroups for \"%s\" failed, errno=%d\n", name, errno); + if (initgroups (name, verify->gid) < 0) { + LogError ("initgroups for \"%s\" failed: %s\n", name, + _SysErrorMsg (errno)); return (0); } #endif /* QNX4 doesn't support multi-groups, no initgroups() */ #ifdef USE_PAM - if (pamh) { - pam_error = pam_setcred (pamh, PAM_ESTABLISH_CRED); + if (thepamh ()) { + pam_error = pam_setcred (thepamh (), PAM_ESTABLISH_CRED); if (pam_error != PAM_SUCCESS) { - LogError ("pam_setcred for \"%s\" failed: %s\n", - name, pam_strerror(pamh, pam_error)); - return(0); + LogError ("pam_setcred for \"%s\" failed: %s\n", name, + pam_strerror (pamh, pam_error)); + return (0); } } #endif - if (setuid(verify->uid) < 0) { - LogError ("setuid %d (user \"%s\") failed, errno=%d\n", - verify->uid, name, errno); + if (setuid (verify->uid) < 0) { + LogError ("setuid %d (user \"%s\") failed: %s\n", + verify->uid, name, _SysErrorMsg (errno)); return (0); } #else /* HAS_SETUSERCONTEXT */ @@ -609,16 +611,17 @@ * Set the user's credentials: uid, gid, groups, * environment variables, resource limits, and umask. */ - pwd = getpwnam(name); + pwd = getpwnam (name); if (pwd) { - if (setusercontext(NULL, pwd, pwd->pw_uid, LOGIN_SETALL) < 0) { - LogError ("setusercontext for \"%s\" failed, errno=%d\n", name, - errno); + if (setusercontext (NULL, pwd, pwd->pw_uid, LOGIN_SETALL) < 0) { + LogError ("setusercontext for \"%s\" failed: %s\n", name, + _SysErrorMsg (errno)); return (0); } - endpwent(); + endpwent (); } else { - LogError ("getpwnam for \"%s\" failed, errno=%d\n", name, errno); + LogError ("getpwnam for \"%s\" failed: %s\n", name, + _SysErrorMsg (errno)); return (0); } #endif /* HAS_SETUSERCONTEXT */ @@ -627,8 +630,9 @@ * Set the user's credentials: uid, gid, groups, * audit classes, user limits, and umask. */ - if (setpcred(name, NULL) == -1) { - LogError ("setpcred for \"%s\" failed, errno=%d\n", name, errno); + if (setpcred (name, NULL) == -1) { + LogError ("setpcred for \"%s\" failed: %s\n", name, + _SysErrorMsg (errno)); return (0); } #endif /* AIXV3 */ @@ -647,24 +651,24 @@ int key_set_ok = 0; nameret = getnetname (netname); - Debug ("User netname: %s\n", netname); + Debug ("user netname: %s\n", netname); len = strlen (passwd); if (len > 8) bzero (passwd + 8, len - 8); - keyret = getsecretkey(netname,secretkey,passwd); + keyret = getsecretkey (netname,secretkey,passwd); Debug ("getsecretkey returns %d, key length %d\n", keyret, strlen (secretkey)); - memcpy(&(netst.st_priv_key), secretkey, HEXKEYBYTES); - netst.st_netname = strdup(netname); - memset(netst.st_pub_key, 0, HEXKEYBYTES); - if (key_setnet(&netst) < 0) { - Debug ("Could not set secret key.\n"); + memcpy (&(netst.st_priv_key), secretkey, HEXKEYBYTES); + netst.st_netname = strdup (netname); + memset (netst.st_pub_key, 0, HEXKEYBYTES); + if (key_setnet (&netst) < 0) { + Debug ("could not set secret key.\n"); } - free(netst.st_netname); + free (netst.st_netname); /* is there a key, and do we have the right password? */ if (keyret == 1) { if (*secretkey) { - keyret = key_setsecret(secretkey); + keyret = key_setsecret (secretkey); Debug ("key_setsecret returns %d\n", keyret); if (keyret == -1) LogError ("failed to set NIS secret key\n"); @@ -681,7 +685,7 @@ int i, j; for (i = 0; i < d->authNum; i++) { if (d->authorizations[i]->name_length == 9 && - memcmp(d->authorizations[i]->name, "SUN-DES-1", 9) == 0) { + memcmp (d->authorizations[i]->name, "SUN-DES-1", 9) == 0) { for (j = i+1; j < d->authNum; j++) d->authorizations[j-1] = d->authorizations[j]; d->authNum--; @@ -689,7 +693,7 @@ } } } - bzero(secretkey, strlen(secretkey)); + bzero (secretkey, strlen (secretkey)); } #endif #ifdef K5AUTH @@ -697,18 +701,18 @@ { int i, j; int result; - extern char *Krb5CCacheName(); + extern char *Krb5CCacheName (); - result = Krb5Init(name, passwd, d); + result = Krb5Init (name, passwd, d); if (result == 0) { /* point session clients at the Kerberos credentials cache */ verify->userEnviron = - setEnv(verify->userEnviron, - "KRB5CCNAME", Krb5CCacheName(d->name)); + setEnv (verify->userEnviron, + "KRB5CCNAME", Krb5CCacheName (d->name)); } else { for (i = 0; i < d->authNum; i++) { if (d->authorizations[i]->name_length == 14 && - memcmp(d->authorizations[i]->name, "MIT-KERBEROS-5", 14) == 0) { + memcmp (d->authorizations[i]->name, "MIT-KERBEROS-5", 14) == 0) { /* remove Kerberos from authorizations list */ for (j = i+1; j < d->authNum; j++) d->authorizations[j-1] = d->authorizations[j]; @@ -719,7 +723,7 @@ } } #endif /* K5AUTH */ - bzero(passwd, strlen(passwd)); + bzero (passwd, strlen (passwd)); SetUserAuthorization (d, verify); home = getEnv (verify->userEnviron, "HOME"); if (home) @@ -727,27 +731,27 @@ LogError ("user \"%s\": cannot chdir to home \"%s\" (err %d), using \"/\"\n", getEnv (verify->userEnviron, "USER"), home, errno); chdir ("/"); - verify->userEnviron = setEnv(verify->userEnviron, "HOME", "/"); + verify->userEnviron = setEnv (verify->userEnviron, "HOME", "/"); } if (verify->argv) { Debug ("executing session %s\n", verify->argv[0]); execute (verify->argv, verify->userEnviron); - LogError ("Session \"%s\" execution failed (err %d)\n", verify->argv[0], errno); + LogError ("session \"%s\" execution failed (err %d)\n", verify->argv[0], errno); } else { - LogError ("Session has no command/arguments\n"); + LogError ("session has no command/arguments\n"); } failsafeArgv[0] = d->failsafeClient; failsafeArgv[1] = 0; execute (failsafeArgv, verify->userEnviron); exit (1); case -1: - bzero(passwd, strlen(passwd)); + bzero (passwd, strlen (passwd)); Debug ("StartSession, fork failed\n"); - LogError ("can't start session on \"%s\", fork failed, errno=%d\n", - d->name, errno); + LogError ("can't start session on \"%s\", fork failed: %s\n", + d->name, _SysErrorMsg (errno)); return 0; default: - bzero(passwd, strlen(passwd)); + bzero (passwd, strlen (passwd)); Debug ("StartSession, fork succeeded %d\n", pid); *pidp = pid; return 1; @@ -856,7 +860,7 @@ p = "/bin/sh"; optarg = 0; } - Debug ("Shell script execution: %s (optarg %s)\n", + Debug ("shell script execution: %s (optarg %s)\n", p, optarg ? optarg : "(null)"); for (av = argv, argc = 0; *av; av++, argc++) /* SUPPRESS 530 */ @@ -910,9 +914,10 @@ return env; } -#if (defined(Lynx) && !defined(HAS_CRYPT)) || defined(SCO) && !defined(SCO_USA) && !defined(_SCO_DS) -char *crypt(char *s1, char *s2) +#if (defined(Lynx) && !defined(HAS_CRYPT)) || (defined(SCO) && !defined(SCO_USA) && !defined(_SCO_DS)) +char * +crypt (char *s1, char *s2) { - return(s2); + return (s2); } #endif
signature.asc
Description: Digital signature