diff options
author | Günther Deschner <gdeschner@redhat.com> | 2012-06-07 15:30:16 +0200 |
---|---|---|
committer | Günther Deschner <gdeschner@redhat.com> | 2012-06-07 15:30:16 +0200 |
commit | 8cc28d8b5513c105bc3ffb3ef4d2f7473eb044d4 (patch) | |
tree | 89ff270fa98227b22cef6e67cb6c4681618ef275 | |
parent | cf51c31f5e847a296f1d9fa4ebe4fd882ba79b74 (diff) | |
download | gss-proxy-my-daemon.tar.gz gss-proxy-my-daemon.tar.xz gss-proxy-my-daemon.zip |
add gp_write_gss_cred_to_ring_buffer/gp_read_gss_cred_to_ring_buffer.my-daemon
Guenther
-rw-r--r-- | proxy/src/gp_export.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/proxy/src/gp_export.c b/proxy/src/gp_export.c index a26487c..d3ef301 100644 --- a/proxy/src/gp_export.c +++ b/proxy/src/gp_export.c @@ -142,6 +142,86 @@ void gp_free_ring_buffer(struct gp_ring_buffer *buffer) } +/** +* @brief +* +* @param min +* @param buffer +* @param cred +* @param pos +* +* @return +*/ +static uint32_t gp_write_gss_cred_to_ring_buffer(uint32_t *min, + struct gp_ring_buffer *buffer, + gss_cred_id_t *cred, + uint32_t *pos) +{ + if (!buffer || !cred) { + *min = EINVAL; + return GSS_S_FAILURE; + } + + /* ======> LOCK */ + pthread_mutex_lock(&buffer->lock); + + buffer->count++; + + *pos = buffer->end; + + buffer->creds[buffer->end] = cred; + buffer->end = (buffer->end + 1) % buffer->size; + + if (buffer->end == buffer->start) { + buffer->start = (buffer->start + 1) % buffer->size; + } + + /* <====== LOCK */ + pthread_mutex_unlock(&buffer->lock); + + *min = 0; + + return GSS_S_COMPLETE; +} + +/** +* @brief +* +* @param min +* @param buffer +* @param pos +* @param cred +* +* @return +*/ +static uint32_t gp_read_gss_creds_from_ring_buffer(uint32_t *min, + struct gp_ring_buffer *buffer, + uint32_t pos, + gss_cred_id_t **cred) +{ + if (!buffer || !cred) { + *min = EINVAL; + return GSS_S_FAILURE; + } + + if (pos > buffer->size) { + *min = EINVAL; + return GSS_S_FAILURE; + } + + /* ======> LOCK */ + pthread_mutex_lock(&buffer->lock); + + *cred = buffer->creds[pos]; + + /* <====== LOCK */ + pthread_mutex_unlock(&buffer->lock); + + *min = 0; + + return GSS_S_COMPLETE; +} + uint32_t gp_export_gssx_cred(uint32_t *min, gss_cred_id_t *in, gssx_cred *out) { |