Skip to content

Commit aa593d5

Browse files
author
gdt
committed
2003-12-22 Christian Hammers <[email protected]>
* configure.ac (and everywhere a regular file is opened for writing): use file permissions from configure rather than compiled-in umask.
1 parent 47ce02a commit aa593d5

File tree

9 files changed

+77
-10
lines changed

9 files changed

+77
-10
lines changed

ChangeLog

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
2003-12-22 Christian Hammers <[email protected]>
2+
3+
* configure.ac (and everywhere a regular file is opened for
4+
writing): use file permissions from configure rather than
5+
compiled-in umask.
6+
17
2003-12-22 Hasso Tepper <[email protected]>
28

39
* lib/linklist.c: Revert microfix I commited while reverting

NEWS

+4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
directory from $(sysconfdir), easing NetBSD pkgsrc hierarchy rules
99
compliance.
1010

11+
- New configure options --enable-configfile-mask and
12+
--enable-logfile-mask to set umask values for config and log
13+
values. Masks default to 0600, matching previous behavior.
14+
1115
* Changes in Quagga 0.96.4
1216

1317
- Further fixes to ospfd, some relating to the PtP revert. Interface

bgpd/bgp_dump.c

+7-1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ bgp_dump_open_file (struct bgp_dump *bgp_dump)
9595
struct tm *tm;
9696
char fullpath[MAXPATHLEN];
9797
char realpath[MAXPATHLEN];
98+
mode_t oldumask;
9899

99100
time (&clock);
100101
tm = localtime (&clock);
@@ -117,10 +118,15 @@ bgp_dump_open_file (struct bgp_dump *bgp_dump)
117118
fclose (bgp_dump->fp);
118119

119120

121+
oldumask = umask(0777 & ~LOGFILE_MASK);
120122
bgp_dump->fp = fopen (realpath, "w");
121123

122124
if (bgp_dump->fp == NULL)
123-
return NULL;
125+
{
126+
umask(oldumask);
127+
return NULL;
128+
}
129+
umask(oldumask);
124130

125131
return bgp_dump->fp;
126132
}

configure.ac

+12
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,10 @@ AC_ARG_ENABLE(quagga_group,
115115
[ --enable-group=ARG group to run Quagga suite as (default quagga)])
116116
AC_ARG_ENABLE(vty_group,
117117
[ --enable-vty-group=ARG set vty sockets to have specified group as owner])
118+
AC_ARG_ENABLE(configfile_mask,
119+
[ --enable-configfile-mask=ARG set mask for config files])
120+
AC_ARG_ENABLE(logfile_mask,
121+
[ --enable-logfile-mask=ARG set mask for log files])
118122

119123
AC_ARG_ENABLE(rtadv,
120124
[ --disable-rtadv disable IPV6 router advertisement feature])
@@ -176,6 +180,12 @@ elif test x"${enable_vty_group}" != x""; then
176180
fi
177181
fi
178182

183+
enable_configfile_mask=${enable_configfile_mask:-0600}
184+
AC_DEFINE_UNQUOTED(CONFIGFILE_MASK, ${enable_configfile_mask}, Mask for config files)
185+
186+
enable_logfile_mask=${enable_logfile_mask:-0600}
187+
AC_DEFINE_UNQUOTED(LOGFILE_MASK, ${enable_logfile_mask}, Mask for log files)
188+
179189
changequote(, )dnl
180190

181191
MULTIPATH_NUM=1
@@ -1073,6 +1083,8 @@ example directory : `eval echo \`echo ${exampledir}\``
10731083
user to run as : ${enable_user}
10741084
group to run as : ${enable_group}
10751085
group for vty sockets : ${enable_vty_group}
1086+
config file mask : ${enable_configfile_mask}
1087+
log file mask : ${enable_logfile_mask}
10761088

10771089
The above user and group must have read/write access to the state file
10781090
directory and to the config files in the config file directory.

lib/command.c

+8
Original file line numberDiff line numberDiff line change
@@ -2552,6 +2552,14 @@ DEFUN (config_write_file,
25522552

25532553
free (config_file_sav);
25542554
free (config_file_tmp);
2555+
2556+
if (chmod (config_file, CONFIGFILE_MASK) != 0)
2557+
{
2558+
vty_out (vty, "Can't chmod configuration file %s: %s (%d).%s",
2559+
config_file, strerror(errno), errno, VTY_NEWLINE);
2560+
return CMD_WARNING;
2561+
}
2562+
25552563
vty_out (vty, "Configuration saved to %s%s", config_file,
25562564
VTY_NEWLINE);
25572565
return CMD_SUCCESS;

lib/log.c

+15-2
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,7 @@ int
365365
zlog_set_file (struct zlog *zl, int flags, char *filename)
366366
{
367367
FILE *fp;
368+
mode_t oldumask;
368369

369370
/* There is opend file. */
370371
zlog_reset_file (zl);
@@ -374,9 +375,14 @@ zlog_set_file (struct zlog *zl, int flags, char *filename)
374375
zl = zlog_default;
375376

376377
/* Open file. */
378+
oldumask = umask (0777 & ~LOGFILE_MASK);
377379
fp = fopen (filename, "a");
378380
if (fp == NULL)
379-
return 0;
381+
{
382+
umask(oldumask);
383+
return 0;
384+
}
385+
umask(oldumask);
380386

381387
/* Set flags. */
382388
zl->filename = strdup (filename);
@@ -421,9 +427,16 @@ zlog_rotate (struct zlog *zl)
421427

422428
if (zl->filename)
423429
{
430+
mode_t oldumask;
431+
432+
oldumask = umask (0777 & ~LOGFILE_MASK);
424433
fp = fopen (zl->filename, "a");
425434
if (fp == NULL)
426-
return -1;
435+
{
436+
umask(oldumask);
437+
return -1;
438+
}
439+
umask(oldumask);
427440
zl->fp = fp;
428441
}
429442

lib/pid_output.c

+10-1
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,20 @@ pid_output (char *path)
3232
#ifndef HAVE_FCNTL
3333
FILE *fp;
3434
pid_t pid;
35+
mask_t oldumask;
3536

3637
pid = getpid();
3738

39+
oldumask = umask(0777 & ~LOGFILE_MASK);
3840
fp = fopen (path, "w");
3941
if (fp != NULL)
4042
{
4143
fprintf (fp, "%d\n", (int) pid);
4244
fclose (fp);
45+
umask(oldumask);
4346
return -1;
4447
}
48+
umask(oldumask);
4549
return pid;
4650
#else
4751
return pid_output_lock(path);
@@ -57,18 +61,23 @@ pid_output_lock (char *path)
5761
pid_t pid;
5862
char buf[16];
5963
struct flock lock;
64+
mode_t oldumask;
6065

6166
pid = getpid ();
6267

63-
fd = open (path, O_RDWR | O_CREAT, 0644);
68+
oldumask = umask(0777 & ~LOGFILE_MASK);
69+
zlog_err( "old umask %d %d", oldumask, 0777 & ~LOGFILE_MASK);
70+
fd = open (path, O_RDWR | O_CREAT, LOGFILE_MASK);
6471
if (fd < 0)
6572
{
6673
zlog_err( "Can't creat pid lock file %s (%s), exit",
6774
path, strerror(errno));
75+
umask(oldumask);
6876
exit (-1);
6977
}
7078
else
7179
{
80+
umask(oldumask);
7281
memset (&lock, 0, sizeof(lock));
7382

7483
lock.l_type = F_WRLCK;

lib/vty.c

+8
Original file line numberDiff line numberDiff line change
@@ -2185,6 +2185,14 @@ vty_use_backup_config (char *fullpath)
21852185
close (sav);
21862186
close (tmp);
21872187

2188+
if (chmod(fullpath_tmp, CONFIGFILE_MASK) != 0)
2189+
{
2190+
free (fullpath_sav);
2191+
free (fullpath_tmp);
2192+
unlink (fullpath_tmp);
2193+
return NULL;
2194+
}
2195+
21882196
if (link (fullpath_tmp, fullpath) == 0)
21892197
ret = fopen (fullpath, "r");
21902198

vtysh/vtysh.c

+7-6
Original file line numberDiff line numberDiff line change
@@ -1287,14 +1287,10 @@ DEFUN (no_vtysh_write_config,
12871287
int write_config_integrated(void)
12881288
{
12891289
int ret;
1290-
mode_t old_umask;
12911290
char line[] = "write terminal\n";
12921291
FILE *fp;
12931292
char *integrate_sav = NULL;
12941293

1295-
/* config files have 0600 perms... */
1296-
old_umask = umask (0077);
1297-
12981294
integrate_sav = malloc (strlen (integrate_default)
12991295
+ strlen (CONF_BACKUP_EXT) + 1);
13001296
strcpy (integrate_sav, integrate_default);
@@ -1312,7 +1308,6 @@ int write_config_integrated(void)
13121308
if (fp == NULL)
13131309
{
13141310
fprintf (stdout,"%% Can't open configuration file %s.\n", integrate_default);
1315-
umask (old_umask);
13161311
return CMD_SUCCESS;
13171312
}
13181313

@@ -1329,11 +1324,17 @@ int write_config_integrated(void)
13291324

13301325
fclose (fp);
13311326

1327+
if (chmod (integrate_default, CONFIGFILE_MASK) != 0)
1328+
{
1329+
fprintf (stdout,"%% Can't chmod configuration file %s: %s (%d)\n",
1330+
integrate_default, strerror(errno), errno);
1331+
return CMD_WARNING;
1332+
}
1333+
13321334
fprintf(stdout,"Integrated configuration saved to %s\n",integrate_default);
13331335

13341336
fprintf (stdout,"[OK]\n");
13351337

1336-
umask (old_umask);
13371338
return CMD_SUCCESS;
13381339
}
13391340

0 commit comments

Comments
 (0)