summaryrefslogtreecommitdiffstats
path: root/crypto/kerberosIV/appl/bsd/sysv_default.c
blob: e6b28a7280c7a4f4f775081c3a2693bb65ef826d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/* Author: Wietse Venema <wietse@wzv.win.tue.nl> */

#include "bsd_locl.h"

RCSID("$Id: sysv_default.c,v 1.11 1999/03/13 21:15:24 assar Exp $");

#include "sysv_default.h"

 /*
  * Default values for stuff that can be read from the defaults file. The
  * SunOS 5.1 documentation is incomplete and often disagrees with reality.
  */

static char default_umask_value[] = "022";

char   *default_console	= 0;
char   *default_altsh	= "YES";
char   *default_passreq	= "NO";
char   *default_timezone= 0;
char   *default_hz	= 0;
char   *default_path	= _PATH_DEFPATH;
char   *default_supath	= _PATH_DEFSUPATH;
char   *default_ulimit	= 0;
char   *default_timeout	= "180";
char   *default_umask	= default_umask_value;
char   *default_sleep	= "4";
char   *default_maxtrys	= "5";

static struct sysv_default {
    char  **valptr;
    char   *prefix;
    int     prefix_len;
} defaults[] = {
    {&default_console,	"CONSOLE=",	sizeof("CONSOLE=") -1},
    {&default_altsh,	"ALTSHELL=",	sizeof("ALTSHELL=") -1},
    {&default_passreq,	"PASSREQ=",	sizeof("PASSREQ=") -1},
    {&default_timezone,	"TIMEZONE=",	sizeof("TIMEZONE=") -1},
    {&default_hz,	"HZ=",		sizeof("HZ=") -1},
    {&default_path,	"PATH=",	sizeof("PATH=") -1},
    {&default_supath,	"SUPATH=",	sizeof("SUPATH=") -1},
    {&default_ulimit,	"ULIMIT=",	sizeof("ULIMIT=") -1},
    {&default_timeout,	"TIMEOUT=",	sizeof("TIMEOUT=") -1},
    {&default_umask,	"UMASK=",	sizeof("UMASK=") -1},
    {&default_sleep,	"SLEEPTIME=",	sizeof("SLEEPTIME=") -1},
    {&default_maxtrys,	"MAXTRYS=",	sizeof("MAXTRYS=") -1},
    {0},
};

#define trim(s) { \
	char   *cp = s + strlen(s); \
	while (cp > s && isspace((unsigned char)cp[-1])) \
	    cp--; \
	*cp = 0; \
}

/* sysv_defaults - read login defaults file */

void
sysv_defaults()
{
    struct sysv_default *dp;
    FILE   *fp;
    char    buf[BUFSIZ];

    if ((fp = fopen(_PATH_ETC_DEFAULT_LOGIN, "r"))) {

	/* Stupid quadratic algorithm. */

	while (fgets(buf, sizeof(buf), fp)) {

	    /* Skip comments and blank lines. */

	    if (buf[0] == '#')
		continue;
	    trim(buf);
	    if (buf[0] == 0)
		continue;

	    /* Assign defaults from file. */

#define STREQN(x,y,l) (x[0] == y[0] && strncmp(x,y,l) == 0)

	    for (dp = defaults; dp->valptr; dp++) {
		if (STREQN(buf, dp->prefix, dp->prefix_len)) {
		    if ((*(dp->valptr) = strdup(buf + dp->prefix_len)) == 0) {
			warnx("Insufficient memory resources - try later.");
			sleepexit(1);
		    }
		    break;
		}
	    }
	}
	fclose(fp);
    }
}
OpenPOWER on IntegriCloud