[fpc-pascal]How to get the Home Directory of the user?

Michael Van Canneyt michael.vancanneyt at wisa.be
Fri Sep 6 20:57:49 CEST 2002


On Fri, 6 Sep 2002, [iso-8859-1] Hélio Cavichiolo Jr wrote:

> How to check if a call to getpwnam had success?
> How to change user information?
>
> I made this program to test but the 'if' never matches.
> Entering a valid user, I had to remove de 'if' to see user's gecos, by the
> other hand, entering an invalid user, the program crashes on the 'if'.

You are trying to compare strings with pchars; this will not work.

>
> program test;
>
> uses
>   pwdlibc;
>
> var
>   pwd : pPasswd;
>   user: pChar;

You should define this as a string. Define a second pchar 'puser';
    user : string;
    puser : pchar;

>
> begin
>   user := '';
>   write('Usuário: ');
>   readln(user);

Add here

   user:=user+#0;
   puser:=@user[1];

>   pwd := Getpwnam(user);
>   if user = pwd^.pw_name then

Change the above by
    if strcmp(puser,pwd^.pw_name)=0 then

and it should work.

Michael.
>     begin
>       writeln('(',pwd^.pw_name,')');
>       writeln('(',pwd^.pw_gecos,')');
>     end
>   else
>     writeln(user,' not found!');
> end.
>
> > Hi,
> > this is how you can get some info's from a logged User:
> >
> > unit pwdlibc;
> > {---------------------------------------------------------------------------
> >                                  CncWare
> >                             (c) Copyright 1999
> > ----------------------------------------------------------------------------
> >   Filename..: pwdlibc.pp
> >   Programmer: Ken J. Wright
> >   Date......: 10/01/1999
> >
> >   Purpose - Link to the Linux 'c' library for system passwd functions.
> >
> > -------------------------------< Revisions
> >>---------------------------------
> > Revision|   Date   | Prog| Description
> > ----------------------------------------------------------------------------
> > -
> > 1.00    | 10/01/99 | kjw | Initial release.
> > ----------------------------------------------------------------------------
> > -
> > }
> >
> > interface
> >
> > {$linklib c}
> >
> > {$PACKRECORDS 4}
> > Type
> >    pPasswd = ^passwd;
> >    passwd  = Record
> >       pw_name,                         { Username }
> >       pw_passwd : pChar;               { Password }
> >       pw_uid,                          { User ID }
> >       pw_gid : longint;                { Group ID }
> >       pw_gecos,                        { Real Name }
> >       pw_dir,                          { Home directory }
> >       pw_shell : pChar;                { Shell program }
> >    End;
> >
> >    pGroup = ^group;
> >    group  = Record
> >       gr_name,                         { Group name }
> >       gr_passwd : pChar;               { Password }
> >       gr_gid : longint;                { Group ID }
> >       gr_mem : pChar;                  { Member list }
> >    End;
> >
> > { returns a pointer to a passwd record }
> > Function getpwuid(uid : longint) : pPasswd; cdecl;
> > Function getpwnam(nam : pChar) : pPasswd; cdecl;
> >
> > { returns a pointer to a group record }
> > Function getgrgid(gid : longint) : pGroup; cdecl;
> > Function getgrnam(nam : pChar) : pGroup; cdecl;
> >
> > implementation
> >
> > Function getpwuid(uid : longint) : pPasswd; cdecl; External;
> > Function getpwnam(nam : pChar) : pPasswd; cdecl; External;
> > Function getgrgid(gid : longint) : pGroup; cdecl; External;
> > Function getgrnam(nam : pChar) : pGroup; cdecl; External;
> >
> > end.
> >
> > my regards,
> > Stefan
> >
> >
> >
> >>Hello, Every body
> >>
> >>  Can you tell me how to get the Home Directory of a user in free
> >> pascal
> > under
> >>linux? Thank you very much.
> >>
> >>  Yours,
> >>  mili
> >
> >
> >
> >
> >
> > _______________________________________________
> > fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> > http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>
>
> --
> Helio Cavichiolo Jr
> Analista de Sistemas
> Esc Telecomunicações Ltda
> D e f i n i t y   L i n u x
>
>
>
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
>






More information about the fpc-pascal mailing list