pike.git / src / modules / Yp / yp.c

version» Context lines:

pike.git/src/modules/Yp/yp.c:24:   #include "constants.h"   #include "interpret.h"   #include "svalue.h"   #include "mapping.h"   #include "builtin_functions.h"   #include "module_support.h"      /* must be included last */   #include "module_magic.h"    - RCSID("$Id: yp.c,v 1.21 2000/12/05 21:08:32 per Exp $"); + RCSID("$Id: yp.c,v 1.22 2001/01/05 13:50:56 grubba Exp $");      #ifdef HAVE_YPERR_STRING   #define YPERROR(fun,err) do{ if(err) Pike_error("yp->%s(): %s\n", (fun), \    yperr_string(err)); }while(0)   #else /* !HAVE_YPERR_STRING */   #define YPERROR(fun,err) do{ if(err) Pike_error("yp->%s(): YP error %d.\n", (fun), \    (err)); }while(0)   #endif /* HAVE_YPERR_STRING */      struct my_yp_domain   {    char *domain;    int last_size; /* Optimize some allocations */   };      #define this ((struct my_yp_domain *)fp->current_storage)    -  + /*! @module Yp +  *! +  *! This module is an interface to the Yellow Pages functions. Yp is also +  *! known as NIS (Network Information System) and is most commonly used to +  *! distribute passwords and similar information within a network. +  */ +  + /*! @decl string default_yp_domain() +  *! +  *! Returns the default yp-domain. +  */   static void f_default_yp_domain(INT32 args)   {    int err;    char *ret;       err = yp_get_default_domain(&ret);       YPERROR( "default_yp_domain", err );       pop_n_elems( args );    push_text( ret );   }    -  + /*! @class Domain +  */ +  + /*! @decl string server(string map) +  *! +  *! Returns the hostname of the server serving the map @[map]. @[map] +  *! is the YP-map to search in. This must be the full map name. +  *! eg @tt{passwd.byname@} instead of just @tt{passwd@}. +  */   static void f_server(INT32 args)   {    int err;    char *ret;       err = yp_master(this->domain, sp[-1].u.string->str, &ret);       YPERROR( "server", err );       pop_n_elems( args );    push_text( ret );   }    -  + /*! @decl void create(string|void domain) +  *! +  *! If @[domain] is not specified , the default domain will be used. +  *! (As returned by @[Yp.default_yp_domain()]). +  *! +  *! If there is no YP server available for the domain, this +  *! function call will block until there is one. If no server appears +  *! in about ten minutes or so, an error will be returned. This timeout +  *! is not configurable. +  *! +  *! @seealso +  *! @[Yp.default_yp_domain()] +  */   static void f_create(INT32 args)   {    int err;    if(!args)    {    f_default_yp_domain(0);    args = 1;    }    check_all_args("yp->create", args, BIT_STRING,0);   
pike.git/src/modules/Yp/yp.c:91:    free(this->domain);    }    this->domain = strdup( sp[-args].u.string->str );    err = yp_bind( this->domain );       YPERROR("create", err);       pop_n_elems(args);   }    + /*! @decl mapping(string:string) all(string map) +  *! +  *! Returns the whole map as a mapping. +  *! +  *! @[map] is the YP-map to search in. This must be the full map name, +  *! you have to use @tt{passwd.byname@} instead of just @tt{passwd@}. +  */   static void f_all(INT32 args)   {    int err, num=0;    char *retval, *retkey;    int retlen, retkeylen;    char *map;    struct mapping *res_map;    check_all_args("yp->all", args, BIT_STRING, 0);       map = sp[-1].u.string->str;
pike.git/src/modules/Yp/yp.c:126:    {    free_mapping( res_map );    YPERROR( "all", err );    }       this->last_size = num;    pop_n_elems(args);    push_mapping( res_map );   }    + /*! @decl void map(string map, function(string, string:void) fun) +  *! +  *! For each entry in @[map], call the function specified by @[fun]. +  *! +  *! @[fun()] will get two arguments, the first being the key, and the +  *! second the value. +  *! +  *! @[map] is the YP-map to search in. This must be the full map name. +  *! eg @tt{passwd.byname@} instead of just @tt{passwd@}. +  */   static void f_map(INT32 args)   {    int err;    char *retval, *retkey;    int retlen, retkeylen;    char *map;       struct svalue *f = &sp[-1];       check_all_args("map", args, BIT_STRING, BIT_FUNCTION|BIT_ARRAY, 0 );
pike.git/src/modules/Yp/yp.c:155:    err = yp_next(this->domain, map, retkey, retkeylen,    &retkey, &retkeylen, &retval, &retlen);    } while(!err);       if(err != YPERR_NOMORE)    YPERROR( "all", err );       pop_n_elems(args);   }    + /*! @decl int order(string map) +  *! +  *! Returns the 'order' number for the map @[map]. +  *! +  *! This is usually the number of seconds since Jan 1 1970 (see @[time()]). +  *! When the map is changed, this number will change as well. +  *! +  *! @[map] is the YP-map to search in. This must be the full map name. +  *! eg @tt{passwd.byname@} instead of just @tt{passwd@}. +  */   static void f_order(INT32 args)   {    int err;    YP_ORDER_TYPE ret;       check_all_args("yp->order", args, BIT_STRING, 0);       err = yp_order( this->domain, sp[-args].u.string->str, &ret);       YPERROR("order", err );       pop_n_elems( args );    push_int( (INT32) ret );   }    -  + /*! @decl string match(string map, string key) +  *! +  *! Search for the key @[key] in the Yp-map @[map]. +  *! +  *! @returns +  *! If there is no @[key] in the map, 0 (zero) will be returned, +  *! otherwise the string matching the key will be returned. +  *! +  *! @note +  *! @[key] must match exactly, no pattern matching of any kind is done. +  */   static void f_match(INT32 args)   {    int err;    char *retval;    int retlen;       check_all_args("yp->match", args, BIT_STRING, BIT_STRING, 0);       err = yp_match( this->domain, sp[-args].u.string->str,    sp[-args+1].u.string->str, sp[-args+1].u.string->len,
pike.git/src/modules/Yp/yp.c:211:      static void exit_yp_struct( struct object *o )   {    if(this->domain)    {    yp_unbind( this->domain );    free(this->domain);    }   }    + /*! @endclass +  */    -  + /*! @endmodule +  */ +    /******************** PUBLIC FUNCTIONS BELOW THIS LINE */         void pike_module_init(void)   {      /* function(void:string) */    ADD_EFUN("default_yp_domain", f_default_yp_domain,tFunc(tVoid,tStr),    OPT_EXTERNAL_DEPEND);