Magellan Linux

Contents of /trunk/mkinitrd-magellan/busybox/loginutils/deluser.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 532 - (show annotations) (download)
Sat Sep 1 22:45:15 2007 UTC (16 years, 9 months ago) by niro
File MIME type: text/plain
File size: 1878 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd

1 /* vi: set sw=4 ts=4: */
2 /*
3 * deluser (remove lusers from the system ;) for TinyLogin
4 *
5 * Copyright (C) 1999 by Lineo, inc. and John Beppu
6 * Copyright (C) 1999,2000,2001 by John Beppu <beppu@codepoet.org>
7 * Unified with delgroup by Tito Ragusa <farmatito@tiscali.it>
8 *
9 * Licensed under GPL version 2, see file LICENSE in this tarball for details.
10 *
11 */
12
13 #include "busybox.h"
14
15 static void del_line_matching(const char *login, const char *filename)
16 {
17 char *line;
18 FILE *passwd;
19 int len = strlen(login);
20 int found = 0;
21 llist_t *plist = NULL;
22
23 passwd = fopen_or_warn(filename, "r");
24 if (!passwd) return;
25
26 while ((line = xmalloc_fgets(passwd))) {
27 if (!strncmp(line, login, len)
28 && line[len] == ':'
29 ) {
30 found++;
31 free(line);
32 } else {
33 llist_add_to_end(&plist, line);
34 }
35 }
36
37 if (!ENABLE_FEATURE_CLEAN_UP) {
38 if (!found) {
39 bb_error_msg("can't find '%s' in '%s'", login, filename);
40 return;
41 }
42 passwd = fopen_or_warn(filename, "w");
43 if (passwd)
44 while ((line = llist_pop(&plist)))
45 fputs(line, passwd);
46 } else {
47 if (!found) {
48 bb_error_msg("can't find '%s' in '%s'", login, filename);
49 goto clean_up;
50 }
51 fclose(passwd);
52 passwd = fopen_or_warn(filename, "w");
53 if (passwd) {
54 clean_up:
55 while ((line = llist_pop(&plist))) {
56 if (found) fputs(line, passwd);
57 free(line);
58 }
59 fclose(passwd);
60 }
61 }
62 }
63
64 int deluser_main(int argc, char **argv)
65 {
66 if (argc != 2)
67 bb_show_usage();
68
69 if (ENABLE_DELUSER
70 && (!ENABLE_DELGROUP || applet_name[3] == 'u')
71 ) {
72 del_line_matching(argv[1], bb_path_passwd_file);
73 if (ENABLE_FEATURE_SHADOWPASSWDS)
74 del_line_matching(argv[1], bb_path_shadow_file);
75 }
76 del_line_matching(argv[1], bb_path_group_file);
77 if (ENABLE_FEATURE_SHADOWPASSWDS)
78 del_line_matching(argv[1], bb_path_gshadow_file);
79
80 return EXIT_SUCCESS;
81 }
82
83 /* $Id: deluser.c,v 1.1 2007-09-01 22:43:52 niro Exp $ */