summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordawes <dawes>1995-10-21 11:51:24 +0000
committerdawes <dawes>1995-10-21 11:51:24 +0000
commit59b82d05c0d63a3761b41c8997c487dc133f15d2 (patch)
tree158e8f2784d5b4478f6ea6a47bd642d0d64dfd50
parent8035ce8d3105501704bc28270e45d93aab757eac (diff)
updates
-rw-r--r--programs/xdm/dm.h6
-rw-r--r--programs/xdm/greeter/Login.c6
-rw-r--r--programs/xdm/greeter/Login.h4
-rw-r--r--programs/xdm/greeter/LoginP.h3
-rw-r--r--programs/xdm/greeter/greet.c16
-rw-r--r--programs/xdm/greeter/verify.c12
-rw-r--r--programs/xdm/xdm.man7
-rw-r--r--programs/xrdb/xrdb.c163
8 files changed, 145 insertions, 72 deletions
diff --git a/programs/xdm/dm.h b/programs/xdm/dm.h
index cd33215b9..fcece8865 100644
--- a/programs/xdm/dm.h
+++ b/programs/xdm/dm.h
@@ -1,5 +1,5 @@
-/* $XConsortium: dm.h,v 1.63.1.1 95/01/26 19:31:18 kaleb Exp $ */
-/* $XFree86: xc/programs/xdm/dm.h,v 3.6 1994/11/19 08:00:30 dawes Exp $ */
+/* $XConsortium: dm.h,v 1.63.1.1 95/01/26 19:31:18 kaleb Mod $ */
+/* $XFree86: xc/programs/xdm/dm.h,v 3.7 1995/01/28 16:16:51 dawes Exp $ */
/*
Copyright (c) 1988 X Consortium
@@ -49,6 +49,7 @@ from the X Consortium.
#include <X11/Xfuncs.h>
#include <X11/Xmd.h>
#include <X11/Xauth.h>
+#include <X11/Intrinsic.h>
#if defined(X_POSIX_C_SOURCE)
#define _POSIX_C_SOURCE X_POSIX_C_SOURCE
@@ -258,6 +259,7 @@ struct greet_info {
char *passwd; /* binary compat with DEC */
int version; /* for dynamic greeter to see */
/* add new fields below this line, and preferably at the end */
+ Boolean allow_null_passwd; /* allow null password on login */
};
/* setgroups is not covered by POSIX, arg type varies */
diff --git a/programs/xdm/greeter/Login.c b/programs/xdm/greeter/Login.c
index 838dfae98..057447654 100644
--- a/programs/xdm/greeter/Login.c
+++ b/programs/xdm/greeter/Login.c
@@ -1,4 +1,4 @@
-/* $XConsortium: Login.c,v 1.42 94/04/17 20:03:53 gildea Exp $ */
+/* $XConsortium: Login.c,v 1.42 94/04/17 20:03:53 gildea Mod $ */
/*
Copyright (c) 1988 X Consortium
@@ -94,7 +94,9 @@ static XtResource resources[] = {
{XtNsecureSession, XtCSecureSession, XtRBoolean, sizeof (Boolean),
offset(secure_session), XtRImmediate, False },
{XtNallowAccess, XtCAllowAccess, XtRBoolean, sizeof (Boolean),
- offset(allow_access), XtRImmediate, False }
+ offset(allow_access), XtRImmediate, False },
+ {XtNallowNullPasswd, XtCAllowNullPasswd, XtRBoolean, sizeof (Boolean),
+ offset(allow_null_passwd), XtRImmediate, False}
};
#undef offset
diff --git a/programs/xdm/greeter/Login.h b/programs/xdm/greeter/Login.h
index f78873b72..d25c4cb4d 100644
--- a/programs/xdm/greeter/Login.h
+++ b/programs/xdm/greeter/Login.h
@@ -1,4 +1,4 @@
-/* $XConsortium: Login.h,v 1.9 94/04/17 20:03:53 keith Exp $ */
+/* $XConsortium: Login.h,v 1.9 94/04/17 20:03:53 keith Mod $ */
/*
Copyright (c) 1988 X Consortium
@@ -76,6 +76,7 @@ from the X Consortium.
# define XtNsessionArgument "sessionArgument"
# define XtNsecureSession "secureSession"
# define XtNallowAccess "allowAccess"
+# define XtNallowNullPasswd "allowNullPasswd"
# define XtCGreeting "Greeting"
# define XtCNamePrompt "NamePrompt"
@@ -85,6 +86,7 @@ from the X Consortium.
# define XtCSessionArgument "SessionArgument"
# define XtCSecureSession "SecureSession"
# define XtCAllowAccess "AllowAccess"
+# define XtCAllowNullPasswd "AllowNullPasswd"
/* notifyDone interface definition */
diff --git a/programs/xdm/greeter/LoginP.h b/programs/xdm/greeter/LoginP.h
index c528eaf5a..adbcf8d84 100644
--- a/programs/xdm/greeter/LoginP.h
+++ b/programs/xdm/greeter/LoginP.h
@@ -1,4 +1,4 @@
-/* $XConsortium: LoginP.h,v 1.7 94/04/17 20:03:54 jim Exp $ */
+/* $XConsortium: LoginP.h,v 1.7 94/04/17 20:03:54 jim Mod $ */
/*
Copyright (c) 1988 X Consortium
@@ -75,6 +75,7 @@ typedef struct {
XtIntervalId interval_id; /* drop fail message note */
Boolean secure_session; /* session is secured */
Boolean allow_access; /* disable access control on login */
+ Boolean allow_null_passwd; /* allow null password on login */
} LoginPart;
/* Full instance record declaration */
diff --git a/programs/xdm/greeter/greet.c b/programs/xdm/greeter/greet.c
index f4341d0e5..bb64aae43 100644
--- a/programs/xdm/greeter/greet.c
+++ b/programs/xdm/greeter/greet.c
@@ -1,4 +1,4 @@
-/* $XConsortium: greet.c,v 1.40 94/04/17 20:03:54 gildea Exp $ */
+/* $XConsortium: greet.c,v 1.41 94/09/12 21:32:49 converse Mod $ */
/*
Copyright (c) 1988 X Consortium
@@ -211,23 +211,24 @@ CloseGreet (d)
{
Boolean allow;
Arg arglist[1];
+ Display *dpy = XtDisplay(toplevel);
if (pingTimeout)
{
XtRemoveTimeOut (pingTimeout);
pingTimeout = 0;
}
- UnsecureDisplay (d, XtDisplay (toplevel));
+ UnsecureDisplay (d, dpy);
XtSetArg (arglist[0], XtNallowAccess, (char *) &allow);
XtGetValues (login, arglist, 1);
if (allow)
{
Debug ("Disabling access control\n");
- XSetAccessControl (XtDisplay (toplevel), DisableAccess);
+ XSetAccessControl (dpy, DisableAccess);
}
XtDestroyWidget (toplevel);
- ClearCloseOnFork (XConnectionNumber (XtDisplay (toplevel)));
- XCloseDisplay (XtDisplay (toplevel));
+ ClearCloseOnFork (XConnectionNumber (dpy));
+ XCloseDisplay (dpy);
Debug ("Greet connection closed\n");
}
@@ -237,7 +238,7 @@ Greet (d, greet)
struct greet_info *greet;
{
XEvent event;
- Arg arglist[1];
+ Arg arglist[2];
XtSetArg (arglist[0], XtNallowAccess, False);
XtSetValues (login, arglist, 1);
@@ -255,7 +256,8 @@ Greet (d, greet)
greet->name = name;
greet->password = password;
XtSetArg (arglist[0], XtNsessionArgument, (char *) &(greet->string));
- XtGetValues (login, arglist, 1);
+ XtSetArg (arglist[1], XtNallowNullPasswd, (char *) &(greet->allow_null_passwd));
+ XtGetValues (login, arglist, 2);
Debug ("sessionArgument: %s\n", greet->string ? greet->string : "<NULL>");
}
return code;
diff --git a/programs/xdm/greeter/verify.c b/programs/xdm/greeter/verify.c
index 14ec91069..87b4b64f9 100644
--- a/programs/xdm/greeter/verify.c
+++ b/programs/xdm/greeter/verify.c
@@ -1,5 +1,5 @@
-/* $XConsortium: verify.c,v 1.32 94/04/17 20:03:55 gildea Exp $ */
-/* $XFree86$ */
+/* $XConsortium: verify.c,v 1.32 94/04/17 20:03:55 gildea Mod $ */
+/* $XFree86: xc/programs/xdm/greeter/verify.c,v 3.0 1994/06/26 13:12:06 dawes Exp $ */
/*
Copyright (c) 1988 X Consortium
@@ -189,9 +189,11 @@ struct verify_info *verify;
if (strcmp (crypt (greet->password, p->pw_passwd), p->pw_passwd))
#endif
{
- Debug ("password verify failed\n");
- bzero(greet->password, strlen(greet->password));
- return 0;
+ if(!greet->allow_null_passwd || strlen(p->pw_passwd) > 0) {
+ Debug ("password verify failed\n");
+ bzero(greet->password, strlen(greet->password));
+ return 0;
+ } /* else: null passwd okay */
}
Debug ("verify succeeded\n");
/* bzero(greet->password, strlen(greet->password)); */
diff --git a/programs/xdm/xdm.man b/programs/xdm/xdm.man
index cef08ac86..0c05addf3 100644
--- a/programs/xdm/xdm.man
+++ b/programs/xdm/xdm.man
@@ -1,4 +1,4 @@
-.\" $XConsortium: xdm.man,v 1.34 94/04/17 20:03:49 gildea Exp $
+.\" $XConsortium: xdm.man,v 1.34 94/04/17 20:03:49 gildea Mod $
.\" Copyright (c) 1988, 1994 X Consortium
.\"
.\" Permission is hereby granted, free of charge, to any person obtaining
@@ -888,6 +888,11 @@ translation table is:
<Key>: insert-char() \\
.fi
+.IP "\fBxlogin.Login.allowNullPasswd\fP"
+If set to ``true'', allow an otherwise failing password match to succeed
+if the account does not require a password at all.
+The default is ``false'', so only users that have passwords assigned can
+log in.
.PP
The actions which are supported by the widget are:
.IP "delete-previous-character"
diff --git a/programs/xrdb/xrdb.c b/programs/xrdb/xrdb.c
index 52008fa2b..f11782e95 100644
--- a/programs/xrdb/xrdb.c
+++ b/programs/xrdb/xrdb.c
@@ -2,7 +2,7 @@
* xrdb - X resource manager database utility
*
* $XConsortium: xrdb.c,v 11.75 94/03/27 14:42:02 rws Exp $
- * $XFree86: xc/programs/xrdb/xrdb.c,v 3.0 1994/12/17 10:10:46 dawes Exp $
+ * $XFree86: xc/programs/xrdb/xrdb.c,v 3.1 1995/07/15 15:15:10 dawes Exp $
*/
/*
@@ -102,6 +102,13 @@ typedef struct _Entries {
int room, used;
} Entries;
+/* dynamically allocated strings */
+#define CHUNK_SIZE 4096
+typedef struct _String {
+ char *val;
+ int room, used;
+} String;
+
char *ProgramName;
Bool quiet = False;
char tmpname[32];
@@ -118,11 +125,11 @@ char *editFile = NULL;
char *cpp_program = CPP;
char *backup_suffix = BACKUP_SUFFIX;
Bool dont_execute = False;
-char defines[4096];
+String defines;
int defines_base;
char *cmd_defines[512];
int num_cmd_defines = 0;
-char includes[4096];
+String includes;
Display *dpy;
Buffer buffer;
Entries newDB;
@@ -380,35 +387,37 @@ void ReadFile(buffer, input)
}
AddDef(buff, title, value)
- char *buff, *title, *value;
+ String *buff;
+ char *title, *value;
{
#ifdef PATHETICCPP
if (need_real_defines) {
- strcat(buff, "\n#define ");
- strcat(buff, title);
+ addstring(buff, "\n#define ");
+ addstring(buff, title);
if (value && (value[0] != '\0')) {
- strcat(buff, " ");
- strcat(buff, value);
+ addstring(buff, " ");
+ addstring(buff, value);
}
return;
}
#endif
- if (buff[0]) {
+ if (buff->used) {
if (oper == OPSYMBOLS)
- strcat(buff, "\n-D");
+ addstring(buff, "\n-D");
else
- strcat(buff, " -D");
+ addstring(buff, " -D");
} else
- strcat(buff, "-D");
- strcat(buff, title);
+ addstring(buff, "-D");
+ addstring(buff, title);
if (value && (value[0] != '\0')) {
- strcat(buff, "=");
- strcat(buff, value);
+ addstring(buff, "=");
+ addstring(buff, value);
}
}
AddDefQ(buff, title, value)
- char *buff, *title, *value;
+ String *buff;
+ char *title, *value;
{
#ifdef PATHETICCPP
if (need_real_defines)
@@ -417,14 +426,15 @@ AddDefQ(buff, title, value)
#endif
if (value && (value[0] != '\0')) {
AddDef(buff, title, "\"");
- strcat(buff, value);
- strcat(buff, "\"");
+ addstring(buff, value);
+ addstring(buff, "\"");
} else
AddDef(buff, title, NULL);
}
AddNum(buff, title, value)
- char *buff, *title;
+ String *buff;
+ char *title;
int value;
{
char num[20];
@@ -433,13 +443,15 @@ AddNum(buff, title, value)
}
AddSimpleDef(buff, title)
- char *buff, *title;
+ String *buff;
+ char *title;
{
AddDef(buff, title, (char *)NULL);
}
AddDefTok(buff, prefix, title)
- char *buff, *prefix, *title;
+ String *buff;
+ char *prefix, *title;
{
char *s;
char name[512];
@@ -455,27 +467,28 @@ AddDefTok(buff, prefix, title)
}
AddUndef(buff, title)
- char *buff, *title;
+ String *buff;
+ char *title;
{
#ifdef PATHETICCPP
if (need_real_defines) {
- strcat(buff, "\n#undef ");
- strcat(buff, title);
+ addstring(buff, "\n#undef ");
+ addstring(buff, title);
return;
}
#endif
- if (buff[0]) {
+ if (buff->used) {
if (oper == OPSYMBOLS)
- strcat(buff, "\n-U");
+ addstring(buff, "\n-U");
else
- strcat(buff, " -U");
+ addstring(buff, " -U");
} else
- strcat(buff, "-U");
- strcat(buff, title);
+ addstring(buff, "-U");
+ addstring(buff, title);
}
DoCmdDefines(buff)
- char *buff;
+ String *buff;
{
int i;
char *arg, *val;
@@ -505,7 +518,7 @@ int Resolution(pixels, mm)
void
DoDisplayDefines(display, defs, host)
Display *display;
- register char *defs;
+ register String *defs;
char *host;
{
#define MAXHOSTNAME 255
@@ -555,7 +568,7 @@ void
DoScreenDefines(display, scrno, defs)
Display *display;
int scrno;
- register char *defs;
+ register String *defs;
{
Screen *screen;
Visual *visual;
@@ -751,6 +764,27 @@ Bool isabbreviation (arg, s, minslen)
return (False);
}
+addstring (arg, s)
+ String *arg;
+#if __STDC__
+ const char *s;
+#else
+ char *s;
+#endif
+{
+ if(arg->used + strlen(s) + 1 >= arg->room) {
+ if((arg->val = (char *)realloc(arg->val, arg->room + CHUNK_SIZE))
+ == NULL)
+ fatal("%s: Not enough memory\n", ProgramName);
+ arg->room += CHUNK_SIZE;
+ }
+ if(arg->used)
+ strcat(arg->val, s);
+ else
+ strcpy(arg->val, s);
+ arg->used += strlen(s);
+}
+
main (argc, argv)
int argc;
char **argv;
@@ -764,8 +798,10 @@ main (argc, argv)
ProgramName = argv[0];
- defines[0] = '\0';
- includes[0] = '\0';
+ defines.room = defines.used = includes.room = includes.used = 0;
+
+ /* initialize the includes String struct */
+ addstring(&includes, "");
/* needs to be replaced with XrmParseCommand */
@@ -843,8 +879,8 @@ main (argc, argv)
quiet = True;
continue;
} else if (arg[1] == 'I') {
- strcat(includes, " ");
- strcat(includes, arg);
+ addstring(&includes, " ");
+ addstring(&includes, arg);
continue;
} else if (arg[1] == 'U' || arg[1] == 'D') {
cmd_defines[num_cmd_defines++] = arg;
@@ -908,8 +944,8 @@ main (argc, argv)
fclose(fp);
}
- DoDisplayDefines(dpy, defines, displayname);
- defines_base = strlen(defines);
+ DoDisplayDefines(dpy, &defines, displayname);
+ defines_base = defines.used;
need_newline = (oper == OPQUERY || oper == OPSYMBOLS ||
(dont_execute && oper != OPREMOVE));
InitBuffer(&buffer);
@@ -1034,17 +1070,12 @@ Process(scrno, doScreen, execute)
Window root;
Atom res_prop;
FILE *input, *output;
-#ifndef Lynx
- char cmd[BUFSIZ];
-#else
- char cmd[1024];
-#endif
+ char *cmd;
- defines[defines_base] = '\0';
buffer.used = 0;
InitEntries(&newDB);
- DoScreenDefines(dpy, scrno, defines);
- DoCmdDefines(defines);
+ DoScreenDefines(dpy, scrno, &defines);
+ DoCmdDefines(&defines);
if (doScreen) {
xdefs = XScreenResourceString (ScreenOfDisplay(dpy, scrno));
root = RootWindow(dpy, scrno);
@@ -1055,7 +1086,7 @@ Process(scrno, doScreen, execute)
res_prop = XA_RESOURCE_MANAGER;
}
if (oper == OPSYMBOLS) {
- printf ("%s\n", defines);
+ printf ("%s\n", defines.val);
} else if (oper == OPQUERY) {
if (xdefs)
printf ("%s", xdefs); /* fputs broken in SunOS 4.0 */
@@ -1105,26 +1136,37 @@ Process(scrno, doScreen, execute)
#ifdef WIN32
if (!(input = fopen(tmpname2, "w")))
fatal("%s: can't open file '%s'\n", ProgramName, tmpname2);
- fputs(defines, input);
+ fputs(defines.val, input);
fprintf(input, "\n#include \"%s\"\n", filename);
fclose(input);
(void) mktemp(tmpname3);
- sprintf(cmd, "%s%s %s > %s", cpp_program, includes,
+ if((cmd = (char *)
+ malloc(strlen(cpp_program) + strlen(includes.val) +
+ 1 + strlen(tmpname2) + 3 + strlen(tmpname3) + 1)) ==
+ NULL)
+ fatal("%s: Out of memory\n", ProgramName);
+ sprintf(cmd, "%s%s %s > %s", cpp_program, includes.val,
tmpname2, tmpname3);
if (system(cmd) < 0)
fatal("%s: cannot run '%s'\n", ProgramName, cmd);
+ free(cmd);
if (!(input = fopen(tmpname3, "r")))
fatal("%s: can't open file '%s'\n", ProgramName, tmpname3);
#else
if (!freopen(tmpname2, "w+", stdin))
fatal("%s: can't open file '%s'\n", ProgramName, tmpname2);
- fputs(defines, stdin);
+ fputs(defines.val, stdin);
fprintf(stdin, "\n#include \"%s\"\n", filename);
fflush(stdin);
fseek(stdin, 0, 0);
- sprintf(cmd, "%s%s", cpp_program, includes);
+ if((cmd = (char *)
+ malloc(strlen(cpp_program) + strlen(includes.val) + 1)) ==
+ NULL)
+ fatal("%s: Out of memory\n", ProgramName);
+ sprintf(cmd, "%s%s", cpp_program, includes.val);
if (!(input = popen(cmd, "r")))
fatal("%s: cannot run '%s'\n", ProgramName, cmd);
+ free(cmd);
#endif
} else {
#endif
@@ -1135,16 +1177,31 @@ Process(scrno, doScreen, execute)
if (cpp_program) {
#ifdef WIN32
(void) mktemp(tmpname3);
- sprintf(cmd, "%s%s %s %s > %s", cpp_program, includes, defines,
+ if((cmd = (char *)
+ malloc(strlen(cpp_program) + strlen(includes.val) +
+ 1 + strlen(defines.val) +
+ strlen(filename ? filename : "") + 3 +
+ strlen(tmpname3) + 1)) ==
+ NULL)
+ fatal("%s: Out of memory\n", ProgramName);
+ sprintf(cmd, "%s%s %s %s > %s", cpp_program,
+ includes.val, defines.val,
filename ? filename : "", tmpname3);
if (system(cmd) < 0)
fatal("%s: cannot run '%s'\n", ProgramName, cmd);
+ free(cmd);
if (!(input = fopen(tmpname3, "r")))
fatal("%s: can't open file '%s'\n", ProgramName, tmpname3);
#else
- sprintf(cmd, "%s%s %s", cpp_program, includes, defines);
+ if((cmd = (char *)
+ malloc(strlen(cpp_program) + strlen(includes.val) +
+ strlen(defines.val) + 1)) ==
+ NULL)
+ fatal("%s: Out of memory\n", ProgramName);
+ sprintf(cmd, "%s%s %s", cpp_program, includes.val, defines.val);
if (!(input = popen(cmd, "r")))
fatal("%s: cannot run '%s'\n", ProgramName, cmd);
+ free(cmd);
#endif
} else {
input = stdin;