* Add contextual error information in die() default tip
authorpancake@dazo
Mon Jan 04 00:06:28 2010 +0100 (2010-01-04)
changeset 797f6e98be7a4
parent 6 07ec9e9447f0
* Add contextual error information in die()
sup.c
     1.1 --- a/sup.c	Mon Dec 14 02:17:20 2009 +0100
     1.2 +++ b/sup.c	Mon Jan 04 00:06:28 2010 +0100
     1.3 @@ -18,8 +18,8 @@
     1.4  
     1.5  #include "config.h"
     1.6  
     1.7 -static int die(int ret, const char *str) {
     1.8 -	fprintf (stderr, "%s\n", str);
     1.9 +static int die(int ret, const char *org, const char *str) {
    1.10 +	fprintf (stderr, "%s%s%s\n", org, org?": ":"", str);
    1.11  	return ret;
    1.12  }
    1.13  
    1.14 @@ -27,10 +27,10 @@
    1.15  	int i, uid, gid, ret;
    1.16  
    1.17  	if (argc < 2 || !strcmp (argv[1], "-h"))
    1.18 -		return die (1, HELP);
    1.19 +		return die (1, NULL, HELP);
    1.20  
    1.21  	if (!strcmp (argv[1], "-v"))
    1.22 -		return die (1, VERSION);
    1.23 +		return die (1, NULL, VERSION);
    1.24  
    1.25  	if (!strcmp (argv[1], "-l")) {
    1.26  		for (i = 0; rules[i].cmd != NULL; i++)
    1.27 @@ -48,29 +48,29 @@
    1.28  			struct stat st;
    1.29  			lstat (rules[i].path, &st);
    1.30  			if (st.st_mode & 0222)
    1.31 -				return die (1, "Cannot run writable binaries.");
    1.32 +				return die (1, "stat", "Cannot run writable binaries.");
    1.33  #endif
    1.34  			if (uid != SETUID && rules[i].uid != -1 && rules[i].uid != uid)
    1.35 -				return die (1, "User does not match");
    1.36 +				return die (1, "urule", "User does not match");
    1.37  
    1.38  			if (gid != SETGID && rules[i].gid != -1 && rules[i].gid != gid)
    1.39 -				return die (1, "Group id does not match");
    1.40 +				return die (1, "grule", "Group id does not match");
    1.41  
    1.42  			if (setuid (SETUID) == -1 || setgid (SETGID) == -1 ||
    1.43  			    seteuid (SETUID) == -1 || setegid (SETGID) == -1)
    1.44 -				return die (1, strerror (errno));
    1.45 +				return die (1, "set[e][ug]id", strerror (errno));
    1.46  #ifdef CHROOT
    1.47  			if (*CHROOT)
    1.48  				if (chdir (CHROOT) == -1 || chroot (".") == -1)
    1.49 -					return die (1, strerror (errno));
    1.50 +					return die (1, "chroot", strerror (errno));
    1.51  			if (*CHRDIR)
    1.52  				if (chdir (CHRDIR) == -1)
    1.53 -					return die (1, strerror (errno));
    1.54 +					return die (1, "chdir", strerror (errno));
    1.55  #endif
    1.56  			ret = execv (*rules[i].path? rules[i].path:argv[1], argv+1);
    1.57 -			return die (ret, strerror (errno));
    1.58 +			return die (ret, "execv", strerror (errno));
    1.59  		}
    1.60  	}
    1.61  
    1.62 -	return die (1, "Sorry");
    1.63 +	return die (1, NULL, "Sorry");
    1.64  }