PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  ahfc@sddlmZddlZddlmZeZejdejej j dZ ej Z e j Z e jZe jZe jZe jZye jZe jZWn#ek re jZe jZnXdZdZe jZe jZe jZe jZe jZe jZe jZe j Z e j!Z!dZ"e j#Z#e j$Z$d Z%e j&Z&e j'Z'e j(Z(e j)Z)e j*Z*d Z+d Z,d Z-dS( i(tFFIN(terrorssN typedef ... CONF; typedef ... CONF_METHOD; typedef ... BIO; typedef ... ipa_STACK_OF_CONF_VALUE; /* openssl/conf.h */ typedef struct { char *section; char *name; char *value; } CONF_VALUE; CONF *NCONF_new(CONF_METHOD *meth); void NCONF_free(CONF *conf); int NCONF_load_bio(CONF *conf, BIO *bp, long *eline); ipa_STACK_OF_CONF_VALUE *NCONF_get_section(const CONF *conf, const char *section); char *NCONF_get_string(const CONF *conf, const char *group, const char *name); /* openssl/safestack.h */ // int sk_CONF_VALUE_num(ipa_STACK_OF_CONF_VALUE *); // CONF_VALUE *sk_CONF_VALUE_value(ipa_STACK_OF_CONF_VALUE *, int); /* openssl/stack.h */ typedef ... _STACK; int OPENSSL_sk_num(const _STACK *); void *OPENSSL_sk_value(const _STACK *, int); int sk_num(const _STACK *); void *sk_value(const _STACK *, int); /* openssl/bio.h */ BIO *BIO_new_mem_buf(const void *buf, int len); int BIO_free(BIO *a); /* openssl/asn1.h */ typedef struct ASN1_ENCODING_st { unsigned char *enc; /* DER encoding */ long len; /* Length of encoding */ int modified; /* set to 1 if 'enc' is invalid */ } ASN1_ENCODING; /* openssl/evp.h */ typedef ... EVP_PKEY; void EVP_PKEY_free(EVP_PKEY *pkey); /* openssl/x509.h */ typedef ... ASN1_INTEGER; typedef ... ASN1_BIT_STRING; typedef ... ASN1_OBJECT; typedef ... X509; typedef ... X509_ALGOR; typedef ... X509_CRL; typedef ... X509_NAME; typedef ... X509_PUBKEY; typedef ... ipa_STACK_OF_X509_ATTRIBUTE; typedef struct X509_req_info_st { ASN1_ENCODING enc; ASN1_INTEGER *version; X509_NAME *subject; X509_PUBKEY *pubkey; /* d=2 hl=2 l= 0 cons: cont: 00 */ ipa_STACK_OF_X509_ATTRIBUTE *attributes; /* [ 0 ] */ } X509_REQ_INFO; typedef struct X509_req_st { X509_REQ_INFO *req_info; X509_ALGOR *sig_alg; ASN1_BIT_STRING *signature; int references; } X509_REQ; X509_REQ *X509_REQ_new(void); void X509_REQ_free(X509_REQ *); EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a); int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); int X509_NAME_add_entry_by_OBJ(X509_NAME *name, const ASN1_OBJECT *obj, int type, const unsigned char *bytes, int len, int loc, int set); int X509_NAME_entry_count(X509_NAME *name); int i2d_X509_REQ_INFO(X509_REQ_INFO *a, unsigned char **out); /* openssl/objects.h */ ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name); /* openssl/x509v3.h */ typedef ... X509V3_CONF_METHOD; typedef struct v3_ext_ctx { int flags; X509 *issuer_cert; X509 *subject_cert; X509_REQ *subject_req; X509_CRL *crl; X509V3_CONF_METHOD *db_meth; void *db; } X509V3_CTX; void X509V3_set_ctx(X509V3_CTX *ctx, X509 *issuer, X509 *subject, X509_REQ *req, X509_CRL *crl, int flags); void X509V3_set_nconf(X509V3_CTX *ctx, CONF *conf); int X509V3_EXT_REQ_add_nconf(CONF *conf, X509V3_CTX *ctx, char *section, X509_REQ *req); /* openssl/x509v3.h */ unsigned long ERR_get_error(void); char *ERR_error_string(unsigned long e, char *buf); tcryptocCsttjd|S(Ns_STACK *(tsk_numt_ffitcast(tsk((s8/usr/lib/python2.7/site-packages/ipaclient/csrgen_ffi.pytsk_CONF_VALUE_numscCs%tjdttjd||S(Ns CONF_VALUE *s_STACK *(RRtsk_value(Rti((s8/usr/lib/python2.7/site-packages/ipaclient/csrgen_ffi.pytsk_CONF_VALUE_valuescCs |jjS(N(treq_infotsubject(treq((s8/usr/lib/python2.7/site-packages/ipaclient/csrgen_ffi.pytX509_REQ_get_subject_namesicCsg}t}xq|dkrtjt|t}y|jd}Wntk rht|}nX|j|t}qWt j ddj |dS(Nisutf-8treasons ( t ERR_get_errorRtstringtERR_error_stringtNULLtdecodetUnicodeDecodeErrortreprtappendRtCSRTemplateErrortjoin(tmsgstcodetmsgtstrmsg((s8/usr/lib/python2.7/site-packages/ipaclient/csrgen_ffi.pyt_raise_openssl_errorss    c Cs|xTtt|D]@}t||}tj|j}xQt|D]C\}}|dkrG|dt|kr||d}nPqGqGW|jdr|d}d}nd}t |d}|t krt |j d}n|t krt j ddj|jdnt||ttjd |jdd|stqqWt|sxt j dd ndS( Ns:,.it+iiRsunrecognised attribute type: {}sutf-8sunsigned char *s&error, subject in config file is empty(trangeRR RRtnamet enumeratetlent startswitht OBJ_txt2objRtupperRRtformatRtX509_NAME_add_entry_by_OBJt MBSTRING_UTF8RtvalueRtX509_NAME_entry_count( tsubjtdn_skR tvtrdn_typetidxtctmvaltoid((s8/usr/lib/python2.7/site-packages/ipaclient/csrgen_ffi.pyt_parse_dn_sections4        !  cCsHt}t}t}t}t}ztt}|tkrCtnt|t|}tjddg}t|||}|dkr|ddkrtj ddqtj dd|dnt |dd} | tkrtj dd nt || } | tkr=tj dd tj | nt|t|}t |t}|tkrwtnt}|tkrtnt|} t| | t||stntjd } t| tt|tdt| |t |dd } | tkr=t|| | |s=tq=nt|jt}|dkretntjd |}tjd|}t|j|}|dkrtntj||SWd|tkrt|n|tkrt|n|tkrt|n|tkr*t|n|tkrCt|nXdS(s Return a cffi buffer containing a DER-encoded CertificationRequestInfo. The returned object implements the buffer protocol. slong[1]iiRsCan't load config filesError on line %d of config fileR tdistinguished_names1Unable to find "distinguished_name" key in configs%Unable to find "%s" section in configs X509V3_CTX[1]treq_extensionssunsigned char[%d]sunsigned char **N(Rt NCONF_newRtBIO_new_mem_bufR#RtnewtNCONF_load_bioRRtNCONF_get_stringtNCONF_get_sectionRtd2i_PUBKEY_biot X509_REQ_newRR4tX509_REQ_set_pubkeytX509V3_set_ctxtX509V3_set_nconftX509V3_EXT_REQ_add_nconfti2d_X509_REQ_INFOR tbuffert NCONF_freet X509_REQ_freetBIO_freet EVP_PKEY_free(tconfigtpublic_key_infotreqdataR t nconf_biot pubkey_biotpubkeyt errorlineR tdn_sectR-R text_ctxt extn_sectiontder_lentder_buftder_out((s8/usr/lib/python2.7/site-packages/ipaclient/csrgen_ffi.pytbuild_requestinfos                                  (.tcffiRt ctypes.utiltctypestipalibRRtcdeftdlopentutilt find_libraryt _libcryptoRR7RER:R<R;tOPENSSL_sk_numRtOPENSSL_sk_valueRtAttributeErrorRR R8RGR>RFR?R=RCR(R+RR%RHR)R@RARBRRRR4RV(((s8/usr/lib/python2.7/site-packages/ipaclient/csrgen_ffi.pytsR  o                                *