[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: [BusyBox] [PATCH] (tinylogin 1.02) set passwords from script
From: Torrey Hoffman <thoffman () arnor ! net>
Date: 2002-07-25 15:50:06
[Download RAW message or body]
I find it useful to be able to change passwords from a script. Here is
a patch to the passwd applet of tinylogin 1.02 which adds a "-p" option
that allows you to do that.
If there is some other way to achieve this, I'd like to know about it.
Torrey Hoffman
thoffman@arnor.net
torrey.hoffman@myrio.com
diff -urN -X dontdiff tinylogin-1.02-vanilla/passwd.c tinylogin-1.02/passwd.c
--- tinylogin-1.02-vanilla/passwd.c Thu Jan 3 02:39:44 2002
+++ tinylogin-1.02/passwd.c Thu Jul 25 14:22:36 2002
@@ -19,6 +19,7 @@
static int create_backup(const char *backup, FILE * fp);
static int new_password(const struct passwd *pw, int amroot, int algo);
+static int encrypt_password(char *pass, int algo);
static void set_filesize_limit();
@@ -48,6 +49,8 @@
int lflg = 0; /* -l - lock account */
int uflg = 0; /* -u - unlock account */
int dflg = 0; /* -d - delete password */
+ int pflg = 0; /* -p - set password from argument */
+ char pass[9];
const struct passwd *pw;
unsigned short ruid;
@@ -56,11 +59,16 @@
#endif /* TLG_FEATURE_SHADOWPASSWDS */
amroot = (getuid() == 0);
openlog("passwd", LOG_PID | LOG_CONS | LOG_NOWAIT, LOG_AUTH);
- while ((flag = getopt(argc, argv, "a:dlu")) != EOF) {
+ while ((flag = getopt(argc, argv, "a:p:dlu")) != EOF) {
switch (flag) {
case 'a':
algo = get_algo(optarg);
break;
+ case 'p':
+ pflg++;
+ // copy at most 8 chars from option, forces null termination.
+ STRFCPY(pass, optarg);
+ break;
case 'd':
dflg++;
break;
@@ -109,7 +117,7 @@
#endif /* TLG_FEATURE_SHADOWPASSWDS */
STRFCPY(crypt_passwd, cp);
- if (!(dflg || lflg || uflg)) {
+ if (!(dflg || lflg || uflg || pflg)) {
if (!amroot) {
if (cp[0] == '!') {
syslog(LOG_WARNING, "password locked for `%s'", np);
@@ -120,6 +128,13 @@
if (new_password(pw, amroot, algo)) {
error_msg_and_die( "The password for %s is unchanged.\n", name);
}
+ } else if (pflg) {
+ if (!amroot)
+ error_msg_and_die("Only root can set passwords via command line.\n");
+ if (strlen(pass) < 6)
+ error_msg_and_die("Sorry, minimum password length is 5.\n");
+ printf("Changing password for %s\n",name);
+ encrypt_password(pass,algo);
} else if (lflg) {
if (crypt_passwd[0] != '!') {
memmove(&crypt_passwd[1], crypt_passwd,
@@ -394,6 +409,13 @@
}
bzero(cp, strlen(cp));
bzero(orig, sizeof(orig));
+
+ return encrypt_password(pass, algo);
+}
+
+static int encrypt_password(char *pass, int algo)
+{
+ char *cp;
#ifdef TLG_FEATURE_SHA1_PASSWORDS
if (algo == 2) {
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic