29 #include <sys/types.h> 30 #include <sys/socket.h> 54 #ifndef CURL_DISABLE_LDAP 58 #include <netinet/in.h> 59 #include <arpa/inet.h> 74 #define MIN_BYTE_GAIN 1024 86 static pthread_mutex_t
mutex = PTHREAD_MUTEX_INITIALIZER;
116 locbufs = pthread_getspecific(
thdkey);
117 pthread_setspecific(
thdkey, (
void *) NULL);
118 pthread_key_delete(
thdkey);
149 if((
unsigned long) size <= buf->size) {
163 else if(size <= buf->size)
192 return (
char *) NULL;
197 return (
char *) NULL;
199 if(pthread_setspecific(
thdkey, (
void *) bufs)) {
201 return (
char *) NULL;
217 pthread_mutex_lock(&
mutex);
224 else if(!(locbufs =
calloc((
size_t)
LK_LAST,
sizeof *locbufs))) {
225 pthread_mutex_unlock(&
mutex);
226 return (
char *) NULL;
234 pthread_mutex_unlock(&
mutex);
247 return (
char *) NULL;
273 enodename = (
char *) NULL;
274 eservname = (
char *) NULL;
276 if(nodename && nodenamelen)
277 if(!(enodename =
malloc(nodenamelen)))
280 if(servname && servnamelen)
281 if(!(eservname =
malloc(servnamelen))) {
286 status =
getnameinfo(sa, salen, enodename, nodenamelen,
287 eservname, servnamelen, flags);
291 i = QadrtConvertE2A(nodename, enodename,
292 nodenamelen - 1, strlen(enodename));
297 i = QadrtConvertE2A(servname, eservname,
298 servnamelen - 1, strlen(eservname));
311 const struct addrinfo * hints,
312 struct addrinfo * *
res)
320 enodename = (
char *) NULL;
321 eservname = (
char *) NULL;
324 i = strlen(nodename);
326 if(!(enodename =
malloc(i + 1)))
329 i = QadrtConvertA2E(enodename, nodename, i, i);
334 i = strlen(servname);
336 if(!(eservname =
malloc(i + 1))) {
341 QadrtConvertA2E(eservname, servname, i, i);
345 status =
getaddrinfo(enodename, eservname, hints, res);
367 struct gskstrlist * next;
368 const char * ebcdicstr;
369 const char * asciistr;
372 struct Curl_gsk_descriptor {
374 struct gskstrlist * strlist;
382 struct Curl_gsk_descriptor *
p;
387 return GSK_OS400_ERROR_INVALID_POINTER;
388 if(!(p = (
struct Curl_gsk_descriptor *)
malloc(
sizeof *p)))
389 return GSK_INSUFFICIENT_STORAGE;
390 p->strlist = (
struct gskstrlist *) NULL;
394 *my_env_handle = (gsk_handle) p;
401 gsk_handle * my_session_handle)
404 struct Curl_gsk_descriptor *
p;
409 return GSK_INVALID_HANDLE;
410 if(!my_session_handle)
411 return GSK_OS400_ERROR_INVALID_POINTER;
412 h = ((
struct Curl_gsk_descriptor *) my_env_handle)->h;
413 if(!(p = (
struct Curl_gsk_descriptor *)
malloc(
sizeof *p)))
414 return GSK_INSUFFICIENT_STORAGE;
415 p->strlist = (
struct gskstrlist *) NULL;
419 *my_session_handle = (gsk_handle) p;
425 gsk_free_handle(
struct Curl_gsk_descriptor *
p)
428 struct gskstrlist * q;
430 while((q = p->strlist)) {
432 free((
void *) q->asciistr);
443 struct Curl_gsk_descriptor *
p;
447 return GSK_OS400_ERROR_INVALID_POINTER;
449 return GSK_INVALID_HANDLE;
450 p = (
struct Curl_gsk_descriptor *) *my_env_handle;
453 *my_env_handle = (gsk_handle) NULL;
463 struct Curl_gsk_descriptor *
p;
466 if(!my_session_handle)
467 return GSK_OS400_ERROR_INVALID_POINTER;
468 if(!*my_session_handle)
469 return GSK_INVALID_HANDLE;
470 p = (
struct Curl_gsk_descriptor *) *my_session_handle;
473 *my_session_handle = (gsk_handle) NULL;
483 struct Curl_gsk_descriptor *
p;
486 return GSK_INVALID_HANDLE;
487 p = (
struct Curl_gsk_descriptor *) my_env_handle;
496 struct Curl_gsk_descriptor *
p;
498 if(!my_session_handle)
499 return GSK_INVALID_HANDLE;
500 p = (
struct Curl_gsk_descriptor *) my_session_handle;
507 const char *
buffer,
int bufSize)
510 struct Curl_gsk_descriptor *
p;
515 return GSK_INVALID_HANDLE;
517 return GSK_OS400_ERROR_INVALID_POINTER;
519 return GSK_ATTRIBUTE_INVALID_LENGTH;
520 p = (
struct Curl_gsk_descriptor *) my_gsk_handle;
523 if(!(ebcdicbuf =
malloc(bufSize + 1)))
524 return GSK_INSUFFICIENT_STORAGE;
525 QadrtConvertA2E(ebcdicbuf,
buffer, bufSize, bufSize);
526 ebcdicbuf[bufSize] =
'\0';
535 GSK_ENUM_VALUE enumValue)
538 struct Curl_gsk_descriptor *
p;
541 return GSK_INVALID_HANDLE;
542 p = (
struct Curl_gsk_descriptor *) my_gsk_handle;
549 GSK_NUM_ID numID,
int numValue)
552 struct Curl_gsk_descriptor *
p;
555 return GSK_INVALID_HANDLE;
556 p = (
struct Curl_gsk_descriptor *) my_gsk_handle;
563 GSK_CALLBACK_ID callBackID,
564 void * callBackAreaPtr)
567 struct Curl_gsk_descriptor *
p;
570 return GSK_INVALID_HANDLE;
571 p = (
struct Curl_gsk_descriptor *) my_gsk_handle;
577 cachestring(
struct Curl_gsk_descriptor * p,
578 const char * ebcdicbuf,
int bufsize,
const char * *
buffer)
583 struct gskstrlist * sp;
585 for(sp = p->strlist; sp; sp = sp->next)
586 if(sp->ebcdicstr == ebcdicbuf)
589 if(!(sp = (
struct gskstrlist *)
malloc(
sizeof *sp)))
590 return GSK_INSUFFICIENT_STORAGE;
591 if(!(asciibuf =
malloc(bufsize + 1))) {
593 return GSK_INSUFFICIENT_STORAGE;
595 QadrtConvertE2A(asciibuf, ebcdicbuf, bufsize, bufsize);
596 asciibuf[bufsize] =
'\0';
597 sp->ebcdicstr = ebcdicbuf;
598 sp->asciistr = asciibuf;
599 sp->next = p->strlist;
602 *buffer = sp->asciistr;
609 const char * *
buffer,
int * bufSize)
612 struct Curl_gsk_descriptor *
p;
618 return GSK_INVALID_HANDLE;
620 return GSK_OS400_ERROR_INVALID_POINTER;
621 p = (
struct Curl_gsk_descriptor *) my_gsk_handle;
624 if((rc = cachestring(p, mybuf, mylen,
buffer)) == GSK_OK)
632 GSK_ENUM_VALUE * enumValue)
635 struct Curl_gsk_descriptor *
p;
638 return GSK_INVALID_HANDLE;
639 p = (
struct Curl_gsk_descriptor *) my_gsk_handle;
646 GSK_NUM_ID numID,
int * numValue)
649 struct Curl_gsk_descriptor *
p;
652 return GSK_INVALID_HANDLE;
653 p = (
struct Curl_gsk_descriptor *) my_gsk_handle;
661 const gsk_cert_data_elem * * certDataElem,
662 int * certDataElementCount)
665 struct Curl_gsk_descriptor *
p;
668 return GSK_INVALID_HANDLE;
669 p = (
struct Curl_gsk_descriptor *) my_gsk_handle;
672 certDataElem, certDataElementCount);
680 struct Curl_gsk_descriptor *
p;
682 if(!my_session_handle)
683 return GSK_INVALID_HANDLE;
684 p = (
struct Curl_gsk_descriptor *) my_session_handle;
691 int readBufSize,
int * amtRead)
694 struct Curl_gsk_descriptor *
p;
696 if(!my_session_handle)
697 return GSK_INVALID_HANDLE;
698 p = (
struct Curl_gsk_descriptor *) my_session_handle;
705 int writeBufSize,
int * amtWritten)
708 struct Curl_gsk_descriptor *
p;
710 if(!my_session_handle)
711 return GSK_INVALID_HANDLE;
712 p = (
struct Curl_gsk_descriptor *) my_session_handle;
726 int IOCompletionPort,
727 Qso_OverlappedIO_t * communicationsArea)
730 struct Curl_gsk_descriptor *
p;
732 if(!my_session_handle)
733 return GSK_INVALID_HANDLE;
734 p = (
struct Curl_gsk_descriptor *) my_session_handle;
768 QadrtConvertE2A(t, buf->
value, i, i);
786 if(!in_name || !in_name->
value || !in_name->
length)
789 memcpy((
char *) &in, (
char *) in_name,
sizeof in);
799 QadrtConvertA2E(in.
value, in_name->
value, i, i);
800 ((
char *) in.
value)[
i] =
'\0';
809 int status_type,
gss_OID mech_type,
810 gss_msg_ctx_t * message_context,
gss_buffer_t status_string)
816 mech_type, message_context, status_string);
826 if(Curl_gss_convert_in_place(minor_status, status_string))
838 gss_flags_t req_flags,
OM_uint32 time_req,
853 if((inp = input_token))
864 QadrtConvertA2E(in.
value, input_token->
value, i, i);
865 ((
char *) in.
value)[
i] =
'\0';
871 target_name, mech_type, req_flags, time_req,
872 input_chan_bindings, inp, actual_mech_type,
873 output_token, ret_flags, time_rec);
884 if(Curl_gss_convert_in_place(minor_status, output_token))
909 if(Curl_gss_convert_in_place(minor_status, output_token))
918 #ifndef CURL_DISABLE_LDAP 935 if(!(ehost =
malloc(i + 1)))
936 return (
void *) NULL;
938 QadrtConvertA2E(ehost, host, i, i);
940 result = (
void *)
ldap_init(ehost, port);
955 epasswd = (
char *) NULL;
960 if(!(edn =
malloc(i + 1)))
961 return LDAP_NO_MEMORY;
963 QadrtConvertA2E(edn, dn, i, i);
970 if(!(epasswd =
malloc(i + 1))) {
972 return LDAP_NO_MEMORY;
975 QadrtConvertA2E(epasswd, passwd, i, i);
988 char * * attrs,
int attrsonly, LDAPMessage * *
res)
998 ebase = (
char *) NULL;
999 efilter = (
char *) NULL;
1000 eattrs = (
char * *) NULL;
1001 status = LDAP_SUCCESS;
1006 if(!(ebase =
malloc(i + 1)))
1007 status = LDAP_NO_MEMORY;
1009 QadrtConvertA2E(ebase, base, i, i);
1014 if(filter && status == LDAP_SUCCESS) {
1017 if(!(efilter =
malloc(i + 1)))
1018 status = LDAP_NO_MEMORY;
1020 QadrtConvertA2E(efilter, filter, i, i);
1025 if(attrs && status == LDAP_SUCCESS) {
1026 for(i = 0; attrs[i++];)
1029 if(!(eattrs =
calloc(i,
sizeof *eattrs)))
1030 status = LDAP_NO_MEMORY;
1032 for(j = 0; attrs[
j]; j++) {
1033 i = strlen(attrs[j]);
1035 if(!(eattrs[j] =
malloc(i + 1))) {
1036 status = LDAP_NO_MEMORY;
1040 QadrtConvertA2E(eattrs[j], attrs[j], i, i);
1041 eattrs[
j][
i] =
'\0';
1046 if(status == LDAP_SUCCESS)
1048 efilter? efilter:
"(objectclass=*)",
1049 eattrs, attrsonly, res);
1052 for(j = 0; eattrs[
j]; j++)
1069 struct berval * *
result;
1074 int i = strlen(attr);
1076 if(!(cp =
malloc(i + 1))) {
1077 ldap_set_lderrno(ld, LDAP_NO_MEMORY, NULL,
1079 return (
struct berval * *) NULL;
1082 QadrtConvertA2E(cp, attr, i, i);
1119 if(!(cp2 =
malloc(i + 1)))
1122 QadrtConvertE2A(cp2, cp, i, i);
1137 LDAPMessage * entry, BerElement * * berptr)
1151 if(!(cp2 =
malloc(i + 1)))
1154 QadrtConvertE2A(cp2, cp, i, i);
1169 LDAPMessage * entry, BerElement * berptr)
1183 if(!(cp2 =
malloc(i + 1)))
1186 QadrtConvertE2A(cp2, cp, i, i);
1203 const struct sockaddr * srcaddr,
int srclen)
1206 const struct sockaddr_un * srcu;
1207 struct sockaddr_un * dstu;
1209 unsigned int dstsize;
1213 if(!srcaddr || srclen < offsetof(
struct sockaddr, sa_family) +
1214 sizeof srcaddr->sa_family || srclen >
sizeof *dstaddr) {
1219 memcpy((
char *) dstaddr, (
char *) srcaddr, srclen);
1221 switch (srcaddr->sa_family) {
1224 srcu = (
const struct sockaddr_un *) srcaddr;
1225 dstu = (
struct sockaddr_un *) dstaddr;
1226 dstsize =
sizeof *dstaddr - offsetof(
struct sockaddr_un, sun_path);
1227 srclen -= offsetof(
struct sockaddr_un, sun_path);
1228 i = QadrtConvertA2E(dstu->sun_path, srcu->sun_path, dstsize - 1, srclen);
1229 dstu->sun_path[
i] =
'\0';
1230 i += offsetof(
struct sockaddr_un, sun_path);
1243 struct sockaddr_storage laddr;
1250 return connect(sd, (
struct sockaddr *) &laddr, i);
1259 struct sockaddr_storage laddr;
1266 return bind(sd, (
struct sockaddr *) &laddr, i);
1272 struct sockaddr * dstaddr,
int addrlen)
1276 struct sockaddr_storage laddr;
1283 return sendto(sd, buffer, buflen, flags, (
struct sockaddr *) &laddr, i);
1289 struct sockaddr * fromaddr,
int * addrlen)
1295 const struct sockaddr_un * srcu;
1296 struct sockaddr_un * dstu;
1297 struct sockaddr_storage laddr;
1299 if(!fromaddr || !addrlen || *addrlen <= 0)
1300 return recvfrom(sd, buffer, buflen, flags, fromaddr, addrlen);
1302 laddrlen =
sizeof laddr;
1303 laddr.ss_family = AF_UNSPEC;
1304 rcvlen =
recvfrom(sd, buffer, buflen, flags,
1305 (
struct sockaddr *) &laddr, &laddrlen);
1310 switch (laddr.ss_family) {
1313 srcu = (
const struct sockaddr_un *) &laddr;
1314 dstu = (
struct sockaddr_un *) fromaddr;
1315 i = *addrlen - offsetof(
struct sockaddr_un, sun_path);
1316 laddrlen -= offsetof(
struct sockaddr_un, sun_path);
1317 i = QadrtConvertE2A(dstu->sun_path, srcu->sun_path, i, laddrlen);
1318 laddrlen = i + offsetof(
struct sockaddr_un, sun_path);
1320 if(laddrlen < *addrlen)
1321 dstu->sun_path[
i] =
'\0';
1329 if(laddrlen > *addrlen)
1330 laddrlen = *addrlen;
1333 memcpy((
char *) fromaddr, (
char *) &laddr, laddrlen);
1338 *addrlen = laddrlen;
1345 Curl_os400_zlibVersion(
void)
1353 Curl_os400_inflateInit_(z_streamp strm,
const char *
version,
int stream_size)
1356 z_const
char * msgb4 = strm->msg;
1359 ret = inflateInit(strm);
1361 if(strm->msg != msgb4)
1369 Curl_os400_inflateInit2_(z_streamp strm,
int windowBits,
1370 const char *
version,
int stream_size)
1373 z_const
char * msgb4 = strm->msg;
1376 ret = inflateInit2(strm, windowBits);
1378 if(strm->msg != msgb4)
1386 Curl_os400_inflate(z_streamp strm,
int flush)
1389 z_const
char * msgb4 = strm->msg;
1392 ret = inflate(strm, flush);
1394 if(strm->msg != msgb4)
1402 Curl_os400_inflateEnd(z_streamp strm)
1405 z_const
char * msgb4 = strm->msg;
1408 ret = inflateEnd(strm);
1410 if(strm->msg != msgb4)
OM_uint32 gss_release_buffer(OM_uint32 *min, gss_buffer_t buffer)
#define ldap_simple_bind_s
int Curl_gsk_secure_soc_read(gsk_handle my_session_handle, char *readBuffer, int readBufSize, int *amtRead)
int Curl_gsk_secure_soc_init(gsk_handle my_session_handle)
int Curl_ldap_search_s_a(void *ld, char *base, int scope, char *filter, char **attrs, int attrsonly, LDAPMessage **res)
static pthread_mutex_t mutex
#define gsk_environment_open
#define gsk_environment_init
#define gsk_attribute_set_enum
#define gsk_attribute_set_numeric_value
char *(* Curl_thread_buffer)(localkey_t key, long size)
int Curl_gsk_environment_open(gsk_handle *my_env_handle)
int Curl_gsk_attribute_get_enum(gsk_handle my_gsk_handle, GSK_ENUM_ID enumID, GSK_ENUM_VALUE *enumValue)
int Curl_ldap_simple_bind_s_a(void *ld, char *dn, char *passwd)
CURLcode(* connect)(struct connectdata *conn, int sockindex)
#define ldap_get_values_len
int Curl_gsk_attribute_get_numeric_value(gsk_handle my_gsk_handle, GSK_NUM_ID numID, int *numValue)
int Curl_gsk_secure_soc_close(gsk_handle *my_session_handle)
int Curl_getnameinfo_a(const struct sockaddr *sa, curl_socklen_t salen, char *nodename, curl_socklen_t nodenamelen, char *servname, curl_socklen_t servnamelen, int flags)
#define gsk_secure_soc_open
int Curl_gsk_attribute_get_buffer_a(gsk_handle my_gsk_handle, GSK_BUF_ID bufID, const char **buffer, int *bufSize)
int Curl_os400_recvfrom(int sd, char *buffer, int buflen, int flags, struct sockaddr *fromaddr, int *addrlen)
#define realloc(ptr, size)
#define gsk_secure_soc_write
static char * buffer_unthreaded(localkey_t key, long size)
int Curl_gsk_secure_soc_startInit(gsk_handle my_session_handle, int IOCompletionPort, Qso_OverlappedIO_t *communicationsArea)
struct gss_name_t_desc_struct * gss_name_t
#define gsk_attribute_set_callback
geometry_msgs::TransformStamped t
UNITTEST_START int result
struct berval ** Curl_ldap_get_values_len_a(void *ld, LDAPMessage *entry, const char *attr)
#define gsk_attribute_set_buffer
static int convert_sockaddr(struct sockaddr_storage *dstaddr, const struct sockaddr *srcaddr, int srclen)
int Curl_os400_bind(int sd, struct sockaddr *localaddr, int addrlen)
static char * get_buffer(buffer_t *buf, long size)
memcpy(filename, filename1, strlen(filename1))
OM_uint32 Curl_gss_delete_sec_context_a(OM_uint32 *minor_status, gss_ctx_id_t *context_handle, gss_buffer_t output_token)
CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t
#define gsk_attribute_get_buffer
#define gsk_environment_close
#define gsk_secure_soc_read
struct gss_cred_id_t_desc_struct * gss_cred_id_t
int Curl_getaddrinfo_a(const char *nodename, const char *servname, const struct addrinfo *hints, struct addrinfo **res)
int Curl_gsk_attribute_get_cert_info(gsk_handle my_gsk_handle, GSK_CERT_ID certID, const gsk_cert_data_elem **certDataElem, int *certDataElementCount)
int Curl_gsk_attribute_set_callback(gsk_handle my_gsk_handle, GSK_CALLBACK_ID callBackID, void *callBackAreaPtr)
char * Curl_ldap_get_dn_a(void *ld, LDAPMessage *entry)
static void terminate(void)
int Curl_gsk_attribute_set_numeric_value(gsk_handle my_gsk_handle, GSK_NUM_ID numID, int numValue)
static char * set_thread_string(localkey_t key, const char *s)
OM_uint32 Curl_gss_display_status_a(OM_uint32 *minor_status, OM_uint32 status_value, int status_type, gss_OID mech_type, gss_msg_ctx_t *message_context, gss_buffer_t status_string)
static pthread_key_t thdkey
#define gsk_secure_soc_init
int Curl_gsk_attribute_set_buffer_a(gsk_handle my_gsk_handle, GSK_BUF_ID bufID, const char *buffer, int bufSize)
#define MIN_BYTE_GAIN
QADRT OS/400 ASCII runtime defines only the most used procedures, but but a lot of them are not suppo...
OM_uint32 Curl_gss_init_sec_context_a(OM_uint32 *minor_status, gss_cred_id_t cred_handle, gss_ctx_id_t *context_handle, gss_name_t target_name, gss_OID mech_type, gss_flags_t req_flags, OM_uint32 time_req, gss_channel_bindings_t input_chan_bindings, gss_buffer_t input_token, gss_OID *actual_mech_type, gss_buffer_t output_token, gss_flags_t *ret_flags, OM_uint32 *time_rec)
#define gsk_attribute_get_enum
int Curl_os400_connect(int sd, struct sockaddr *destaddr, int addrlen)
#define gsk_secure_soc_close
#define gss_init_sec_context
void * Curl_ldap_init_a(char *host, int port)
static unsigned short port
char * Curl_ldap_first_attribute_a(void *ld, LDAPMessage *entry, BerElement **berptr)
int Curl_gsk_secure_soc_write(gsk_handle my_session_handle, char *writeBuffer, int writeBufSize, int *amtWritten)
static char * buffer_undef(localkey_t key, long size)
static void thdbufdestroy(void *private)
static char * buffer_threaded(localkey_t key, long size)
int Curl_gsk_attribute_set_enum(gsk_handle my_gsk_handle, GSK_ENUM_ID enumID, GSK_ENUM_VALUE enumValue)
int Curl_os400_sendto(int sd, char *buffer, int buflen, int flags, struct sockaddr *dstaddr, int addrlen)
#define gss_delete_sec_context
int Curl_gsk_secure_soc_misc(gsk_handle my_session_handle, GSK_MISC_ID miscID)
#define gsk_attribute_get_numeric_value
#define gsk_secure_soc_startInit
int Curl_gsk_environment_close(gsk_handle *my_env_handle)
#define ldap_next_attribute
const char * Curl_gsk_strerror_a(int gsk_return_value)
#define gsk_secure_soc_misc
#define MAX_CONV_EXPANSION
static buffer_t * locbufs
char * Curl_ldap_err2string_a(int error)
#define gss_display_status
#define ldap_first_attribute
char * Curl_ldap_next_attribute_a(void *ld, LDAPMessage *entry, BerElement *berptr)
OM_uint32 Curl_gss_import_name_a(OM_uint32 *minor_status, gss_buffer_t in_name, gss_OID in_name_type, gss_name_t *out_name)
#define gsk_attribute_get_cert_info
int Curl_gsk_secure_soc_open(gsk_handle my_env_handle, gsk_handle *my_session_handle)
int Curl_gsk_environment_init(gsk_handle my_env_handle)
size_t(* version)(char *buffer, size_t size)
#define calloc(nbelem, size)