Submitted by: Peter Hawkins <thepish@FreeBSD.org>

Add functionality for support for more than 4 subfields within gcos. chsh,
chpass etc did not parse beyond the 4th field previously and so truncated
gcos on updating the database.
This commit is contained in:
Peter Hawkins 1998-08-14 03:18:32 +00:00
parent 87fffb7ca3
commit 19ae8d1e56
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=38307
3 changed files with 13 additions and 4 deletions

View file

@ -46,6 +46,7 @@ typedef struct _entry {
#define E_HPHONE 9
#define E_LOCATE 10
#define E_NAME 7
#define E_OTHER 11
#define E_SHELL 12
extern ENTRY list[];

View file

@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $Id$
* $Id: edit.c,v 1.10 1997/06/25 06:59:55 charnier Exp $
*/
#ifndef lint
@ -163,6 +163,11 @@ display(fd, pw)
if (!list[E_HPHONE].restricted || !uid)
(void)fprintf(fp, "Home Phone: %s\n", p ? p : "");
if (bp!=NULL)
list[E_OTHER].save = strdup(bp);
if (!list[E_OTHER].restricted || !uid)
(void)fprintf(fp, "Other information: %s\n", bp ? bp : "");
(void)fchown(fd, getuid(), getgid());
(void)fclose(fp);
}
@ -231,11 +236,13 @@ bad: (void)fclose(fp);
/* Build the gecos field. */
len = strlen(list[E_NAME].save) + strlen(list[E_BPHONE].save) +
strlen(list[E_HPHONE].save) + strlen(list[E_LOCATE].save) + 4;
strlen(list[E_HPHONE].save) + strlen(list[E_LOCATE].save) +
strlen(list[E_OTHER].save) + 4;
if (!(p = malloc(len)))
err(1, NULL);
(void)sprintf(pw->pw_gecos = p, "%s,%s,%s,%s", list[E_NAME].save,
list[E_LOCATE].save, list[E_BPHONE].save, list[E_HPHONE].save);
(void)sprintf(pw->pw_gecos = p, "%s,%s,%s,%s,%s", list[E_NAME].save,
list[E_LOCATE].save, list[E_BPHONE].save, list[E_HPHONE].save,
list[E_OTHER].save);
while ((len = strlen(pw->pw_gecos)) && pw->pw_gecos[len - 1] == ',')
pw->pw_gecos[len - 1] = '\0';

View file

@ -58,6 +58,7 @@ ENTRY list[] = {
{ "office phone", p_gecos, 0, 12, e2, },
{ "home phone", p_gecos, 0, 10, e2, },
{ "location", p_gecos, 0, 8, e2, },
{ "other information", p_gecos, 0, 11, e1, },
{ "home directory", p_hdir, 1, 14, e1, },
{ "shell", p_shell, 0, 5, e1, },
{ NULL, 0, },