ldap c api 使用

Publish: March 5, 2013 Category: C/C++ No Comments

#include 

int ldap_exec(char *server, char *dn, char *filter, char *key, char *scope)
{
    LDAP            *ld;
    LDAPMessage     *result, *e;
    BerElement      *ber;
    char            *a;
    char            **vals;
    int             version, rc;

    if ((ld = ldap_init(server, 3389)) == NULL) {
        printf("ldap_init fail: ldap_server:%s\n", server);
        return 1;
    }

    version = LDAP_VERSION3;
    ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION, &version);

    rc = ldap_simple_bind_s(ld, NULL, NULL );
    if (rc != LDAP_SUCCESS) {
        printf("ldap_simple_bind_s: %s", ldap_err2string(rc));
        return 1;
    }

    rc = ldap_search_ext_s(ld, dn, LDAP_SCOPE_SUBTREE, filter, NULL, 0, NULL, NULL, NULL, 0, &result);
    if (rc != LDAP_SUCCESS) {
        ldap_unbind(ld);
        printf("ldap_search_ext_s: %s, ldap_server[%s] ldap_dn[%s] ldap_scope[%s] ldap_filter[%s]", ldap_err2string(rc), server, dn, scope, filter);
        return 1;
    }

    e = ldap_first_entry(ld, result);
    if (e != NULL) {
       for (a = ldap_first_attribute(ld, e, &ber); a != NULL; a = ldap_next_attribute(ld, e, ber)) {
           if ((vals = ldap_get_values(ld, e, a)) != NULL) {
               for (i=0; vals[i] != NULL; i++) {
                   if ((strcasecmp(a, key) == 0)) {
                       printf("ldap get [%s]:[%s]\n", a, vals[i]);

                       ldap_value_free(vals);
                       ldap_memfree(a);
                       if (ber != NULL)
                           ber_free(ber, 0);

                       ldap_msgfree(result);
                       ldap_unbind(ld);

                       return 0;
                   }
               }
               ldap_value_free(vals);
           }
           ldap_memfree(a);
      }

      if (ber != NULL) {
          ber_free(ber, 0);
      }
    } else {
        printf("not found\n");
    }

    ldap_msgfree(result);
    ldap_unbind(ld);

    return 1;
}

mysql C api 使用

Publish: March 5, 2013 Category: MySQL,C/C++ 26 Comments

1. 使用 mysql_api 库,在这里:  

    https://github.com/kyosold/Carrots/tree/master/mysql_api


2. 自己写:

#include "mysql.h"

int mysql_exec(char *host, int port, char *user, char *pass, char *db, char *subject, int subject_len)
{
    MYSQL mysql, *sock;
    MYSQL_RES* res = NULL;
    MYSQL_FIELD *mfd = NULL;
    MYSQL_ROW   row;
    char sql[5 * 4096] = {0};
    mysql_init(&mysql);
    if (!(sock = mysql_real_connect(&mysql, host, user, pass, db, port, NULL, 0))) {
        printf("connect mysql fail\n");
        return 1;
    }
    // select 
    snprintf(sql, sizeof(sql), "select * from table");
    if (mysql_query(sock, sql)) {
        mysql_close(sock);
        printf("query mysql fail:%s\n", mysql_error(sock));
        return 1;
    }
    if (!(res = mysql_store_result(sock))) {
        mysql_close(sock);
        printf("could not get result from %s\n", mysql_error(sock));
        return 1;
    }
    if (row = mysql_fetch_row(res)) {
        printf("field_0:%s\n", row[0]);
        printf("field_1:%s\n", row[1]);
        printf("field_2:%s\n", row[2]);
        printf("field_3:%s\n", row[3]);
        printf("field_4:%s\n", row[4]);
    } else {
        mysql_free_result(res);
        mysql_close(sock);
        printf("is null data\n");
        return 1;
    }
    mysql_free_result(res);
    // insert 
    char mysql_subject[subject_len + 1];
    mysql_real_escape_string(sock, mysql_subject, subject, subject_len);
    snprintf(sql, sizeof(sql), "insert into table (id, subject) values (11, '%s');", mysql_subject);
    if (mysql_query(sock, sql)) {
        mysql_close(sock);
        printf("insert mysql fail:%s\n", mysql_error(sock));
        return 1;
    }
    mysql_close(sock);
    return 0;
}