mirror of
https://github.com/freebsd/freebsd-src
synced 2024-11-05 18:22:52 +00:00
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:
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
|
@ -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[];
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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, },
|
||||
|
|
Loading…
Reference in a new issue