annotate toys/pending/mkpasswd.c @ 1276:d48bdc1cb017 draft

Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make du use it, move it from lib/pending.c to lib.c.
author Rob Landley <rob@landley.net>
date Tue, 06 May 2014 06:31:28 -0500
parents 63db77909fc8
children e65f9a9ba62d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1091
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
1 /* mkpasswd.c - encrypt the given passwd using salt
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
2 *
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
3 * Copyright 2013 Ashwini Kumar <ak.ashwini@gmail.com>
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
4 * Copyright 2013 Kyungwan Han <asura321@gmail.com>
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
5 *
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
6 * No Standard
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
7
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
8 USE_MKPASSWD(NEWTOY(mkpasswd, ">2S:m:P#=0<0", TOYFLAG_USR|TOYFLAG_BIN))
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
9
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
10 config MKPASSWD
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
11 bool "mkpasswd"
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
12 default n
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
13 help
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
14 usage: mkpasswd [OPTIONS] [PASSWORD] [SALT]
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
15
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
16 Crypt PASSWORD using crypt(3)
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
17
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
18 -P N Read password from fd N
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
19 -m TYPE Encryption method, when TYPE='help', then show the methods available
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
20 -S SALT
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
21 */
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
22
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
23 #define FOR_mkpasswd
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
24 #include "toys.h"
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
25
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
26 GLOBALS(
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
27 long pfd;
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
28 char *method;
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
29 char *salt;
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
30 )
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
31
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
32
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
33 /*
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
34 * validate the salt provided by user.
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
35 * the allowed character set for salt is [./A-Za-z0-9]
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
36 */
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
37 static void is_salt_valid(char *salt)
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
38 {
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
39 regex_t rp;
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
40 regmatch_t rm[1];
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
41 char *regex = "[./A-Za-z0-9]*"; //salt REGEX
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
42
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
43 xregcomp(&rp, regex, REG_NEWLINE);
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
44
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
45 /* compare string against pattern -- remember that patterns
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
46 are anchored to the beginning of the line */
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
47 if (regexec(&rp, salt, 1, rm, 0) == 0 && rm[0].rm_so == 0
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
48 && rm[0].rm_eo == strlen(salt))
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
49 return;
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
50
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
51 error_exit("salt should be in character set [./A-Za-z0-9]");
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
52 }
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
53
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
54 void mkpasswd_main(void)
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
55 {
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
56 int offset = 0;
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
57 char salt[MAX_SALT_LEN] = {0,};
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
58
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
59 if (!(toys.optflags & FLAG_m)) TT.method = "des";
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
60 else if (!strcmp(TT.method, "help")) {
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
61 xprintf("Available encryption methods are:\n"
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
62 " des\n md5\n sha256\n sha512\n");
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
63 return;
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
64 }
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
65 // If arguments are there, then the second argument is Salt, can be NULL also
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
66 if ((toys.optc == 2) && !(toys.optflags & FLAG_S)) TT.salt = toys.optargs[1];
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
67
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
68 offset= get_salt(salt, TT.method);
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
69 if (offset == -1) error_exit("unknown encryption method");
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
70 if (TT.salt) {
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
71 is_salt_valid(TT.salt);
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
72 snprintf(salt + offset, MAX_SALT_LEN - offset, "%s", TT.salt);
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
73 }
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
74
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
75 if (toys.optflags & FLAG_P) {
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
76 if (dup2(TT.pfd, STDIN_FILENO) == -1) perror_exit("fd");
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
77 close(TT.pfd);
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
78 }
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
79
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
80 if (!toys.optc) {
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
81 if (isatty(STDIN_FILENO)) {
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
82 if (read_password(toybuf, sizeof(toybuf), "Password: "))
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
83 perror_exit("password read failed");
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
84 } else {
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
85 // read from the given FD
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
86 int i = 0;
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
87 while (1) {
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
88 int ret = read(0, &toybuf[i], 1);
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
89 if ( ret < 0 ) perror_exit("password read failed");
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
90 else if (ret == 0 || toybuf[i] == '\n' || toybuf[i] == '\r' ||
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
91 sizeof(toybuf) == i+1) {
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
92 toybuf[i] = '\0';
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
93 break;
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
94 }
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
95 i++;
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
96 }
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
97 }
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
98 } else snprintf(toybuf, sizeof(toybuf), "%s", toys.optargs[0]);
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
99
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
100 // encrypt & print the password
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
101 xprintf("%s\n",crypt(toybuf, salt));
c4d4a6e7473f useradd, groupadd, and mkpasswd submitted by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff changeset
102 }