Net-Hesiod
view release on metacpan or search on metacpan
{ tmp = sv_newmortal();
sv_setpv(tmp,*res);
XPUSHs(tmp);
i++;
res++;
}
hesiod_free_list(context,results);
XSRETURN(i);
void
hesiod_getpwnam(context,name)
void * context;
const char * name;
PREINIT:
struct passwd *pw;
dTARGET;
SV *tmp;
PPCODE:
pw = hesiod_getpwnam(context,name);
/* Handle errors by returning empty */
if ( ! pw ) { XSRETURN_EMPTY; }
/* Presumably, have a valid response */
tmp = sv_newmortal(); sv_setpv(tmp,pw->pw_name);
XPUSHs(tmp);
tmp = sv_newmortal(); sv_setpv(tmp,pw->pw_passwd);
XPUSHs(tmp);
tmp = sv_newmortal(); sv_setiv(tmp,pw->pw_uid);
XPUSHs(tmp);
tmp = sv_newmortal(); sv_setiv(tmp,pw->pw_gid);
XPUSHs(tmp);
tmp = sv_newmortal();
/* Not all systems have a pw_quota or pw_comment elements.
** Solaris lacks pw_quota, having pw_age instead
** Linux lacks both
If missing, leave undef the return value
*/
#ifndef DONT_HAVE_PW_QUOTA
sv_setiv(tmp,pw->pw_quota);
#else
sv_setsv(tmp,&sv_undef);
#endif
XPUSHs(tmp);
tmp = sv_newmortal();
#ifndef DONT_HAVE_PW_COMMENT
sv_setpv(tmp,pw->pw_comment);
#else
sv_setsv(tmp,&sv_undef);
#endif
XPUSHs(tmp);
tmp = sv_newmortal(); sv_setpv(tmp,pw->pw_gecos);
XPUSHs(tmp);
tmp = sv_newmortal(); sv_setpv(tmp,pw->pw_dir);
XPUSHs(tmp);
tmp = sv_newmortal(); sv_setpv(tmp,pw->pw_shell);
XPUSHs(tmp);
hesiod_free_passwd(context,pw);
XSRETURN(9);
void
hesiod_getpwuid(context,uid)
void * context;
uid_t uid;
PREINIT:
struct passwd *pw;
dTARGET;
SV *tmp;
PPCODE:
pw = hesiod_getpwuid(context,uid);
/* Handle errors by returning empty */
if ( ! pw ) { XSRETURN_EMPTY; }
/* Presumably, have a valid response */
tmp = sv_newmortal(); sv_setpv(tmp,pw->pw_name);
XPUSHs(tmp);
tmp = sv_newmortal(); sv_setpv(tmp,pw->pw_passwd);
XPUSHs(tmp);
tmp = sv_newmortal(); sv_setiv(tmp,pw->pw_uid);
XPUSHs(tmp);
tmp = sv_newmortal(); sv_setiv(tmp,pw->pw_gid);
XPUSHs(tmp);
tmp = sv_newmortal();
/* Leave undef if lacking pw_quota or pw_comment */
#ifndef DONT_HAVE_PW_QUOTA
sv_setiv(tmp,pw->pw_quota);
#else
sv_setsv(tmp,&sv_undef);
#endif
XPUSHs(tmp);
tmp = sv_newmortal();
#ifndef DONT_HAVE_PW_COMMENT
sv_setpv(tmp,pw->pw_comment);
#else
sv_setsv(tmp,&sv_undef);
#endif
XPUSHs(tmp);
tmp = sv_newmortal(); sv_setpv(tmp,pw->pw_gecos);
XPUSHs(tmp);
tmp = sv_newmortal(); sv_setpv(tmp,pw->pw_dir);
XPUSHs(tmp);
tmp = sv_newmortal(); sv_setpv(tmp,pw->pw_shell);
XPUSHs(tmp);
hesiod_free_passwd(context,pw);
XSRETURN(9);
struct servent *
hesiod_getservbyname(context,name, proto)
void * context;
const char * name;
const char * proto;
PREINIT:
struct servent *sent;
dTARGET;
SV *tmp;
int port;
PPCODE:
sent = hesiod_getservbyname(context,name, proto);
/* Handle errors by returning empty */
if ( ! sent ) { XSRETURN_EMPTY; }
/* Presumably, have a valid response */
/* servent struct is supposed to store port number in
network byte order. We return it in host order
to be consistent with perl getservbyname */
port = ntohs(sent->s_port);
tmp= sv_newmortal(); sv_setpv(tmp,sent->s_name);
XPUSHs(tmp);
/* WE now concat the alias list */
tmp= sv_newmortal();
if ( *sent->s_aliases )
{ sv_setpv(tmp,*sent->s_aliases);
( run in 1.783 second using v1.01-cache-2.11-cpan-98e64b0badf )