mirror of
https://github.com/sheumann/hush.git
synced 2024-11-05 06:07:00 +00:00
New test mode that allows run_parts to fail silently if the directory
is not found. Patch from Bastian Blank
This commit is contained in:
parent
aad465efb7
commit
2e51a14d57
@ -86,11 +86,11 @@ char *strtok_r(char *s, const char *delim, char **ptrptr);
|
|||||||
extern void show_usage(void) __attribute__ ((noreturn));
|
extern void show_usage(void) __attribute__ ((noreturn));
|
||||||
extern void error_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
|
extern void error_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
|
||||||
extern void error_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2)));
|
extern void error_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2)));
|
||||||
extern void perror_msg(const char *s, ...);
|
extern void perror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
|
||||||
extern void perror_msg_and_die(const char *s, ...) __attribute__ ((noreturn));
|
extern void perror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2)));
|
||||||
extern void vherror_msg(const char *s, va_list p);
|
extern void vherror_msg(const char *s, va_list p);
|
||||||
extern void herror_msg(const char *s, ...);
|
extern void herror_msg(const char *s, ...) __attribute__ ((format (printf, 1, 2)));
|
||||||
extern void herror_msg_and_die(const char *s, ...) __attribute__ ((noreturn));
|
extern void herror_msg_and_die(const char *s, ...) __attribute__ ((noreturn, format (printf, 1, 2)));
|
||||||
|
|
||||||
/* These two are used internally -- you shouldn't need to use them */
|
/* These two are used internally -- you shouldn't need to use them */
|
||||||
extern void verror_msg(const char *s, va_list p);
|
extern void verror_msg(const char *s, va_list p);
|
||||||
|
@ -43,8 +43,10 @@ static int valid_name(const struct dirent *d)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* run_parts */
|
/* test mode = 1 is the same as offical run_parts
|
||||||
/* Find the parts to run & call run_part() */
|
* test_mode = 2 means to fail siliently on missing directories
|
||||||
|
*/
|
||||||
|
|
||||||
extern int run_parts(char **args, const unsigned char test_mode)
|
extern int run_parts(char **args, const unsigned char test_mode)
|
||||||
{
|
{
|
||||||
struct dirent **namelist = 0;
|
struct dirent **namelist = 0;
|
||||||
@ -64,6 +66,9 @@ extern int run_parts(char **args, const unsigned char test_mode)
|
|||||||
entries = scandir(arg0, &namelist, valid_name, alphasort);
|
entries = scandir(arg0, &namelist, valid_name, alphasort);
|
||||||
|
|
||||||
if (entries == -1) {
|
if (entries == -1) {
|
||||||
|
if (test_mode & 2) {
|
||||||
|
return(2);
|
||||||
|
}
|
||||||
perror_msg_and_die("failed to open directory %s", arg0);
|
perror_msg_and_die("failed to open directory %s", arg0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,8 +80,8 @@ extern int run_parts(char **args, const unsigned char test_mode)
|
|||||||
perror_msg_and_die("failed to stat component %s", filename);
|
perror_msg_and_die("failed to stat component %s", filename);
|
||||||
}
|
}
|
||||||
if (S_ISREG(st.st_mode) && !access(filename, X_OK)) {
|
if (S_ISREG(st.st_mode) && !access(filename, X_OK)) {
|
||||||
if (test_mode) {
|
if (test_mode & 1) {
|
||||||
puts("%s", filename);
|
puts(filename);
|
||||||
} else {
|
} else {
|
||||||
/* exec_errno is common vfork variable */
|
/* exec_errno is common vfork variable */
|
||||||
volatile int exec_errno = 0;
|
volatile int exec_errno = 0;
|
||||||
|
@ -1010,7 +1010,7 @@ static int execute_all(interface_defn_t *ifd, execfn *exec, const char *opt)
|
|||||||
|
|
||||||
buf = xmalloc(xstrlen(opt) + 19);
|
buf = xmalloc(xstrlen(opt) + 19);
|
||||||
sprintf(buf, "/etc/network/if-%s.d", opt);
|
sprintf(buf, "/etc/network/if-%s.d", opt);
|
||||||
run_parts(&buf, 0);
|
run_parts(&buf, 2);
|
||||||
free(buf);
|
free(buf);
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user