summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGünther Deschner <gdeschner@redhat.com>2012-06-07 15:30:16 +0200
committerGünther Deschner <gdeschner@redhat.com>2012-06-07 15:30:16 +0200
commit8cc28d8b5513c105bc3ffb3ef4d2f7473eb044d4 (patch)
tree89ff270fa98227b22cef6e67cb6c4681618ef275
parentcf51c31f5e847a296f1d9fa4ebe4fd882ba79b74 (diff)
downloadgss-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.c80
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)
{