setup: delpasswd.c - added verifyp(), don't mess with files if there is no ...

baggins baggins at pld-linux.org
Mon Mar 2 01:14:50 CET 2009


Author: baggins                      Date: Mon Mar  2 00:14:50 2009 GMT
Module: setup                         Tag: HEAD
---- Log message:
- added verifyp(), don't mess with files if there is no reason to

---- Files affected:
setup:
   delpasswd.c (1.1 -> 1.2) 

---- Diffs:

================================================================
Index: setup/delpasswd.c
diff -u setup/delpasswd.c:1.1 setup/delpasswd.c:1.2
--- setup/delpasswd.c:1.1	Mon Mar  2 00:57:46 2009
+++ setup/delpasswd.c	Mon Mar  2 01:14:45 2009
@@ -249,6 +249,42 @@
 	fatal("cannot get lock");
 }
 
+int verifyp(const char *old_name, int namesc, const char **names)
+{
+	char *old, *tmp, *id;
+	int i, fd;
+	int old_sz;
+
+	// Fail silently if file does not exist
+	if (access(old_name, F_OK) == -1)
+		return -1;
+
+	old = map_file(backup_name, &old_sz);
+	if (old == NULL)
+		fatal("cannot mmap old");
+	
+	for (i = 0; i < old_sz; ) {
+		id = old + i;
+		while (i < old_sz && old[i] != ':' && old[i] != '\n')
+			i++;
+		if (i < old_sz && old[i] == ':') {
+			int id_len, line_len;
+
+			id_len = i - (id - old);
+			while (i < old_sz && old[i] != '\n')
+				i++;
+			if (i < old_sz)
+				i++;
+			line_len = i - (id - old);
+			
+			if (exist(id, id_len, namesc, names))
+				return 1;
+		} else if (i < old_sz)
+			i++;
+	}
+	return 0;
+}
+
 int delp(const char *old_name, const char *backup_name,
 		int namesc, const char **names)
 {
@@ -336,12 +372,16 @@
 		fatal("Usage: delpasswd [-u|-g] name1 name2 ... nameN");
 #if 1
 	if (what == 1) {
-		delp(FILE1, FILE1 BACKUP, argc-2, argv+2);
-		delp(FILE2, FILE2 BACKUP, argc-2, argv+2);
+		if (verifyp(FILE1, argc-2, argv+2))
+			delp(FILE1, FILE1 BACKUP, argc-2, argv+2);
+		if (verifyp(FILE2, argc-2, argv+2))
+			delp(FILE2, FILE2 BACKUP, argc-2, argv+2);
 	}
 	if (what == 2) {
-		delp(FILE3, FILE3 BACKUP, argc-2, argv+2);
-		delp(FILE4, FILE4 BACKUP, argc-2, argv+2);
+		if (verifyp(FILE3, argc-2, argv+2))
+			delp(FILE3, FILE3 BACKUP, argc-2, argv+2);
+		if (verifyp(FILE4, argc-2, argv+2))
+			delp(FILE4, FILE4 BACKUP, argc-2, argv+2);
 	}
 #else
 	delp("test", "test.old", argc-2, argv+2);
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/setup/delpasswd.c?r1=1.1&r2=1.2&f=u



More information about the pld-cvs-commit mailing list