diff options
author | Lennart Poettering <lennart@poettering.net> | 2006-02-24 15:12:42 +0000 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2006-02-24 15:12:42 +0000 |
commit | 3f264b2c4acfaaf8dd9c6b05526708a1d7648db0 (patch) | |
tree | 492a92e07c4b3274a81dd173167c4ba990175e9f /src/polypcore/pdispatch.c | |
parent | a1f5573313e888d39dbe4015bdd993ad9eccb92f (diff) |
add support for authentication using SCM_CREDENTIALS
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@596 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'src/polypcore/pdispatch.c')
-rw-r--r-- | src/polypcore/pdispatch.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/polypcore/pdispatch.c b/src/polypcore/pdispatch.c index 56a21bd6..a4e58f8c 100644 --- a/src/polypcore/pdispatch.c +++ b/src/polypcore/pdispatch.c @@ -109,6 +109,7 @@ struct pa_pdispatch { PA_LLIST_HEAD(struct reply_info, replies); pa_pdispatch_drain_callback drain_callback; void *drain_userdata; + const void *creds; }; static void reply_info_free(struct reply_info *r) { @@ -136,7 +137,8 @@ pa_pdispatch* pa_pdispatch_new(pa_mainloop_api *mainloop, const pa_pdispatch_cb_ PA_LLIST_HEAD_INIT(pa_reply_info, pd->replies); pd->drain_callback = NULL; pd->drain_userdata = NULL; - + pd->creds = NULL; + return pd; } @@ -171,7 +173,7 @@ static void run_action(pa_pdispatch *pd, struct reply_info *r, uint32_t command, pa_pdispatch_unref(pd); } -int pa_pdispatch_run(pa_pdispatch *pd, pa_packet*packet, void *userdata) { +int pa_pdispatch_run(pa_pdispatch *pd, pa_packet*packet, const void *creds, void *userdata) { uint32_t tag, command; pa_tagstruct *ts = NULL; int ret = -1; @@ -188,18 +190,20 @@ int pa_pdispatch_run(pa_pdispatch *pd, pa_packet*packet, void *userdata) { if (pa_tagstruct_getu32(ts, &command) < 0 || pa_tagstruct_getu32(ts, &tag) < 0) goto finish; - + #ifdef DEBUG_OPCODES { char t[256]; char const *p; if (!(p = command_names[command])) snprintf((char*) (p = t), sizeof(t), "%u", command); - + pa_log(__FILE__": Recieved opcode <%s>", p); } #endif + pd->creds = creds; + if (command == PA_COMMAND_ERROR || command == PA_COMMAND_REPLY) { struct reply_info *r; @@ -222,6 +226,8 @@ int pa_pdispatch_run(pa_pdispatch *pd, pa_packet*packet, void *userdata) { ret = 0; finish: + pd->creds = NULL; + if (ts) pa_tagstruct_free(ts); @@ -295,3 +301,10 @@ pa_pdispatch* pa_pdispatch_ref(pa_pdispatch *pd) { pd->ref++; return pd; } + +const void * pa_pdispatch_creds(pa_pdispatch *pd) { + assert(pd); + assert(pd->ref >= 1); + + return pd->creds; +} |