]> git.sur5r.net Git - ngadmin/blob - cli/src/com_password.c
Cli: change password can ask new password with terminal echo disabled
[ngadmin] / cli / src / com_password.c
1
2 #include "commands.h"
3
4
5 int do_password_change (int argc, const char **argv, struct ngadmin *nga)
6 {
7         int i;
8         char buf[64];
9         const struct swi_attr *sa;
10         const char *pass;
11         
12         
13         if (argc > 1) {
14                 printf("usage: password change [<value>]\n");
15                 return 1;
16         }
17         
18         sa = ngadmin_getCurrentSwitch(nga);
19         if (sa == NULL) {
20                 printf("must be logged\n");
21                 return 1;
22         }
23         
24         if (argc == 0) {
25                 printf("Enter new password: ");
26                 fflush(stdout);
27                 current_term.c_lflag &= ~ECHO;
28                 tcsetattr(STDIN_FILENO, TCSANOW, &current_term);
29                 pass = fgets(buf, sizeof(buf), stdin);
30                 trim(buf, strlen(buf));
31                 current_term.c_lflag |= ECHO;
32                 tcsetattr(STDIN_FILENO, TCSANOW, &current_term);
33                 putchar('\n');
34         } else {
35                 pass = argv[0];
36         }
37         
38         if (pass != NULL) {
39                 i = ngadmin_changePassword(nga, pass);
40                 printErrCode(i);
41         }
42         
43         
44         return 0;
45 }
46
47
48 int do_password_set (int argc, const char **argv, struct ngadmin *nga)
49 {
50         int i;
51         char buf[64];
52         const char *pass;
53         
54         
55         if (argc > 1) {
56                 printf("usage: password set [<value>]\n");
57                 return 1;
58         }
59         
60         if (argc == 0) {
61                 printf("Enter password: ");
62                 fflush(stdout);
63                 current_term.c_lflag &= ~ECHO;
64                 tcsetattr(STDIN_FILENO, TCSANOW, &current_term);
65                 pass = fgets(buf, sizeof(buf), stdin);
66                 trim(buf, strlen(buf));
67                 current_term.c_lflag |= ECHO;
68                 tcsetattr(STDIN_FILENO, TCSANOW, &current_term);
69                 putchar('\n');
70         } else {
71                 pass = argv[0];
72         }
73         
74         if (pass != NULL) {
75                 i = ngadmin_setPassword(nga, pass);
76                 printErrCode(i);
77         }
78         
79         
80         return 0;
81 }
82
83