Signed-off-by: Sami Kerola <kerolasa@xxxxxx> --- login-utils/chfn.c | 51 +++++++++++++++------------------------------------ 1 file changed, 15 insertions(+), 36 deletions(-) diff --git a/login-utils/chfn.c b/login-utils/chfn.c index 9833591..7ba1a51 100644 --- a/login-utils/chfn.c +++ b/login-utils/chfn.c @@ -191,42 +191,21 @@ static int parse_argv(int argc, char *argv[], struct finfo *pinfo) static void parse_passwd(struct passwd *pw, struct finfo *pinfo) { char *gecos; - char *cp; - - if (pw) { - pinfo->pw = pw; - pinfo->username = pw->pw_name; - /* use pw_gecos - we take a copy since PAM destroys the original */ - gecos = xstrdup(pw->pw_gecos); - cp = (gecos ? gecos : ""); - pinfo->full_name = cp; - cp = strchr(cp, ','); - if (cp) { - *cp = 0, cp++; - } else - return; - pinfo->office = cp; - cp = strchr(cp, ','); - if (cp) { - *cp = 0, cp++; - } else - return; - pinfo->office_phone = cp; - cp = strchr(cp, ','); - if (cp) { - *cp = 0, cp++; - } else - return; - pinfo->home_phone = cp; - /* extra fields contain site-specific information, and can - * not be changed by this version of chfn. */ - cp = strchr(cp, ','); - if (cp) { - *cp = 0, cp++; - } else - return; - pinfo->other = cp; - } + + if (!pw) + return; + pinfo->pw = pw; + pinfo->username = pw->pw_name; + /* use pw_gecos - we take a copy since PAM destroys the original */ + gecos = xstrdup(pw->pw_gecos); + /* extract known fields */ + pinfo->full_name = strsep(&gecos, ","); + pinfo->office = strsep(&gecos, ","); + pinfo->office_phone = strsep(&gecos, ","); + pinfo->home_phone = strsep(&gecos, ","); + /* extra fields contain site-specific information, and can + * not be changed by this version of chfn. */ + pinfo->other = strsep(&gecos, ","); } /* -- 2.1.3 -- To unsubscribe from this list: send the line "unsubscribe util-linux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html