> Ben: have a look at how mod_rewrite accesses its own 
> ap_register_rewrite_mapfunc via

So Rainer, I just quickly wrote my module, it works, many thanks for your help.

Below is my code, I just have 2 questions regarding it :
1 - do I need to "free(pw)" ?
2 - is "key = apr_palloc(r->pool, 7)" the right method ? Doing this I want to 
avoid buffer overflow in case of uid/gid greater in length than the key 
parameter.

Thank you very much,

Cheers,

Ben



#include "http_core.h"
#include "mod_rewrite.h"
#include <pwd.h>

static char *uid(request_rec *r, char *key)
{
        struct passwd *pw;
        if((pw = getpwnam(key)) == NULL)
        {
                *key = '\0';
        }
        else
        {
                key = apr_palloc(r->pool, 7);
                sprintf(key, "%d", pw->pw_uid);
        }
        return key;
}

static char *gid(request_rec *r, char *key)
{
        int uid=atoi(key);
        struct passwd *pw;
        if((pw = getpwuid(uid)) == NULL)
        {
                *key = '\0';
        }
        else
        {
                key = apr_palloc(r->pool, 7);
                sprintf(key, "%d", pw->pw_gid);
                return key;
        }
        return key;
}

static void register_hooks(apr_pool_t *pool)
{
        APR_OPTIONAL_FN_TYPE(ap_register_rewrite_mapfunc) *map_pfn_register;
        map_pfn_register = 
APR_RETRIEVE_OPTIONAL_FN(ap_register_rewrite_mapfunc);
        map_pfn_register("uid", uid);
        map_pfn_register("gid", gid);
}

AP_DECLARE_MODULE(test) = {
        STANDARD20_MODULE_STUFF,NULL,NULL,NULL,NULL,NULL,register_hooks
};



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@httpd.apache.org
For additional commands, e-mail: users-h...@httpd.apache.org

Reply via email to