コード例 #1
0
ファイル: cnid_dbd.c プロジェクト: NTmatter/Netatalk
/* --------------------- */
static int init_tsock(CNID_private *db)
{
    int fd;
    int len;
    struct iovec iov[2];

    LOG(log_debug, logtype_cnid, "init_tsock: BEGIN. Opening volume '%s', CNID Server: %s/%s",
        db->db_dir, db->cnidserver, db->cnidport);

    if ((fd = tsock_getfd(db->cnidserver, db->cnidport)) < 0)
        return -1;

    len = strlen(db->db_dir);

    iov[0].iov_base = &len;
    iov[0].iov_len  = sizeof(int);

    iov[1].iov_base = db->db_dir;
    iov[1].iov_len  = len;

    if (write_vec(fd, iov, len + sizeof(int), 2) != len + sizeof(int)) {
        LOG(log_error, logtype_cnid, "init_tsock: Error/short write: %s", strerror(errno));
        close(fd);
        return -1;
    }

    LOG(log_debug, logtype_cnid, "init_tsock: ok");

    return fd;
}
コード例 #2
0
ファイル: cnid_dbd.c プロジェクト: Distrotech/netatalk
/* --------------------- */
static int init_tsock(CNID_bdb_private *db)
{
    int fd;
    int len[DBD_NUM_OPEN_ARGS];
    int iovecs;
    struct iovec iov[DBD_NUM_OPEN_ARGS + 1] = {{0}};
    struct vol *vol = db->vol;
    ssize_t iovlen;

    LOG(log_debug, logtype_cnid, "connecting to CNID server: %s:%s",
        vol->v_cnidserver, vol->v_cnidport);

    if ((fd = tsock_getfd(vol->v_cnidserver, vol->v_cnidport)) < 0)
        return -1;

    LOG(log_debug, logtype_cnid, "connecting volume '%s', path: %s, user: %s",
        vol->v_configname, vol->v_path, vol->v_obj->username[0] ? vol->v_obj->username : "******");

    iovecs = 1 + DBD_NUM_OPEN_ARGS - 1;

    len[0] = strlen(vol->v_configname) + 1;
    len[1] = strlen(vol->v_path) + 1;
    len[2] = strlen(vol->v_obj->username);

    iov[0].iov_base = &len[0];
    iov[0].iov_len  = DBD_NUM_OPEN_ARGS * sizeof(int);

    iov[1].iov_base = vol->v_configname;
    iov[1].iov_len  = len[0];

    iov[2].iov_base = vol->v_path;
    iov[2].iov_len  = len[1];

    if (len[2] > 0) {
        len[2] += 1;
        iovecs++;
        iov[3].iov_base = vol->v_obj->username;
        iov[3].iov_len  = len[2];
    }

    iovlen = iov[0].iov_len + iov[1].iov_len + iov[2].iov_len + iov[3].iov_len;

    if (write_vec(fd, iov, iovlen, iovecs) != iovlen) {
        LOG(log_error, logtype_cnid, "init_tsock: Error/short write: %s", strerror(errno));
        close(fd);
        return -1;
    }

    LOG(log_debug, logtype_cnid, "init_tsock: ok");

    return fd;
}