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

