00001
00002
00003
00004
00005
00006 #include "icCollUtil.h"
00007 #include "icutils.h"
00008
00009 int icCollOps (char* collname, char* operation, char* oplist, bytesBuf_t* mybuf, int status) {
00010
00011 rsComm_t* rsComm;
00012 genQueryInp_t gqin;
00013 genQueryOut_t* gqout=NULL;
00014 char condStr[MAX_NAME_LEN];
00015 char tmpstr[MAX_NAME_LEN];
00016
00017
00018 memset (&gqin, 0, sizeof(genQueryInp_t));
00019 gqin.maxRows = MAX_SQL_ROWS;
00020 gqout = (genQueryOut_t*) malloc (sizeof (genQueryOut_t));
00021 memset (gqout, 0, sizeof (genQueryOut_t));
00022
00023
00024 addInxIval (&gqin.selectInp, COL_COLL_NAME, 1);
00025 addInxIval (&gqin.selectInp, COL_COLL_ID, 1);
00026 genAllInCollQCond (collname, condStr);
00027 addInxVal (&gqin.sqlCondInp, COL_COLL_NAME, condStr);
00028
00029
00030 if (!(strcmp(operation,"owner"))) {
00031 addInxIval (&gqin.selectInp, COL_COLL_OWNER_NAME, 1);
00032 } else if (!(strcmp(operation, "AVU"))) {
00033 addInxIval (&gqin.selectInp, COL_META_COLL_ATTR_NAME, 1);
00034 addInxIval (&gqin.selectInp, COL_META_COLL_ATTR_VALUE, 1);
00035 addInxIval (&gqin.selectInp, COL_META_COLL_ATTR_UNITS, 1);
00036 } else if (!(strcmp(operation, "ACL"))) {
00037 addInxIval (&gqin.selectInp, COL_COLL_ACCESS_TYPE, 1);
00038 addInxIval (&gqin.selectInp, COL_COLL_ACCESS_NAME, 1);
00039 } else {
00040 rodsLog (LOG_ERROR, "icCollOps: ERROR");
00041 free( gqout );
00042 return (-1);
00043 }
00044
00045
00046 status = rsGenQuery (rsComm, &gqin, &gqout);
00047 fprintf (stderr, "status=%d\n", status);
00048
00049 if ((status==CAT_NO_ROWS_FOUND) || (status < 0)) {
00050 snprintf (tmpstr, MAX_NAME_LEN, "No rows found matching input criteria.\n");
00051 appendToByteBuf (mybuf, tmpstr);
00052
00053
00054 } else if (!(strcmp(operation,"owner"))) {
00055
00056 verifyCollOwners (gqout, oplist, mybuf);
00057 } else if (!(strcmp(operation, "AVU"))) {
00058
00059
00060 } else if (!(strcmp(operation, "ACL"))) {
00061
00062
00063 }
00064
00065 printGenQueryOut(stderr, NULL, NULL, gqout);
00066
00067 free( gqout );
00068 return (status);
00069
00070 }
00071
00072
00073
00074 int msiVerifySubCollOwner (msParam_t* collinp, msParam_t* ownerinp,
00075 msParam_t *bufout, msParam_t* statout) {
00076
00077 bytesBuf_t* mybuf=NULL;
00078 char* collname;
00079 char* ownerlist;
00080 int status;
00081
00082 mybuf = (bytesBuf_t *) malloc (sizeof (bytesBuf_t));
00083 memset (mybuf, 0, sizeof (bytesBuf_t));
00084
00085 collname = strdup ((char*)collinp->inOutStruct);
00086 ownerlist = strdup ((char*)ownerinp->inOutStruct);
00087
00088 status = icCollOps (collname, "owner", ownerlist, mybuf, status);
00089
00090 fillStrInMsParam (bufout, (char*)mybuf->buf);
00091 fillIntInMsParam (statout, status);
00092 return (status);
00093 }
00094
00095 int msiVerifySubCollAVU (msParam_t* collinp, msParam_t* avunameinp, msParam_t* avuvalueinp,
00096 msParam_t* avuattrinp, msParam_t *bufout, msParam_t* statout) {
00097
00098 rsComm_t* rsComm;
00099 genQueryInp_t gqin;
00100 genQueryOut_t* gqout=NULL;
00101 char condStr[MAX_NAME_LEN];
00102 char tmpstr[MAX_NAME_LEN];
00103 bytesBuf_t* mybuf=NULL;
00104 char* collname;
00105 char* myavuname;
00106 char* myavuvalue;
00107 char* myavuattr;;
00108 int status;
00109
00110
00111 memset (&gqin, 0, sizeof(genQueryInp_t));
00112 gqin.maxRows = MAX_SQL_ROWS;
00113 gqout = (genQueryOut_t*) malloc (sizeof (genQueryOut_t));
00114 memset (gqout, 0, sizeof (genQueryOut_t));
00115 mybuf = (bytesBuf_t *) malloc (sizeof (bytesBuf_t));
00116 memset (mybuf, 0, sizeof (bytesBuf_t));
00117
00118 collname = strdup ((char*)collinp->inOutStruct);
00119 myavuname = strdup ((char*)avunameinp->inOutStruct);
00120 myavuvalue = strdup ((char*)avuvalueinp->inOutStruct);
00121 myavuattr = strdup ((char*)avuattrinp->inOutStruct);
00122
00123
00124 addInxIval (&gqin.selectInp, COL_COLL_NAME, 1);
00125 addInxIval (&gqin.selectInp, COL_COLL_ID, 1);
00126 genAllInCollQCond (collname, condStr);
00127 addInxVal (&gqin.sqlCondInp, COL_COLL_NAME, condStr);
00128
00129
00130 addInxIval (&gqin.selectInp, COL_META_COLL_ATTR_NAME, 1);
00131 addInxIval (&gqin.selectInp, COL_META_COLL_ATTR_VALUE, 1);
00132 addInxIval (&gqin.selectInp, COL_META_COLL_ATTR_UNITS, 1);
00133
00134
00135 status = rsGenQuery (rsComm, &gqin, &gqout);
00136 fprintf (stderr, "status=%d\n", status);
00137
00138 if ((status==CAT_NO_ROWS_FOUND) || (status < 0)) {
00139 snprintf (tmpstr, MAX_NAME_LEN, "No rows found matching input criteria.\n");
00140 appendToByteBuf (mybuf, tmpstr);
00141 } else
00142 verifyCollAVU (gqout, myavuname, myavuvalue, myavuattr, mybuf);
00143
00144 fillStrInMsParam (bufout, (char*)mybuf->buf);
00145 fillIntInMsParam (statout, status);
00146 return (status);
00147 }
00148
00149 int msiVerifySubCollACL (msParam_t* collinp, msParam_t* acltypeinp, msParam_t* aclnameinp, msParam_t *bufout, msParam_t* statout) {
00150
00151 rsComm_t* rsComm;
00152 genQueryInp_t gqin;
00153 genQueryOut_t* gqout=NULL;
00154 bytesBuf_t* mybuf;
00155 char condStr[MAX_NAME_LEN];
00156 char tmpstr[MAX_NAME_LEN];
00157 char* collname;
00158 char* myaclname;
00159 char* myacltype;
00160 int status;
00161
00162
00163 memset (&gqin, 0, sizeof(genQueryInp_t));
00164 gqin.maxRows = MAX_SQL_ROWS;
00165 gqout = (genQueryOut_t*) malloc (sizeof (genQueryOut_t));
00166 memset (gqout, 0, sizeof (genQueryOut_t));
00167 mybuf = (bytesBuf_t *) malloc (sizeof (bytesBuf_t));
00168 memset (mybuf, 0, sizeof (bytesBuf_t));
00169
00170 collname = strdup ((char*)collinp->inOutStruct);
00171 myaclname = strdup ((char*)aclnameinp->inOutStruct);
00172 myacltype = strdup ((char*)acltypeinp->inOutStruct);
00173
00174
00175 addInxIval (&gqin.selectInp, COL_COLL_NAME, 1);
00176 addInxIval (&gqin.selectInp, COL_COLL_ID, 1);
00177 genAllInCollQCond (collname, condStr);
00178 addInxVal (&gqin.sqlCondInp, COL_COLL_NAME, condStr);
00179
00180
00181 addInxIval (&gqin.selectInp, COL_COLL_ACCESS_TYPE, 1);
00182 addInxIval (&gqin.selectInp, COL_COLL_ACCESS_NAME, 1);
00183
00184
00185 status = rsGenQuery (rsComm, &gqin, &gqout);
00186 fprintf (stderr, "status=%d\n", status);
00187
00188 if ((status==CAT_NO_ROWS_FOUND) || (status < 0)) {
00189 snprintf (tmpstr, MAX_NAME_LEN, "No rows found matching input criteria.\n");
00190 appendToByteBuf (mybuf, tmpstr);
00191 } else
00192 verifyCollACL (gqout, myaclname, myacltype, mybuf);
00193
00194 printGenQueryOut(stderr, NULL, NULL, gqout);
00195
00196 fillStrInMsParam (bufout, (char*)mybuf->buf);
00197 fillIntInMsParam (statout, status);
00198 return (status);
00199 }
00200
00201
00202
00203
00204
00205 int msiListColl (msParam_t* collectionname, msParam_t* buf, ruleExecInfo_t* rei) {
00206
00207 rsComm_t* rsComm;
00208 sqlResult_t *collectionName;
00209 sqlResult_t *collectionID;
00210 bytesBuf_t* mybuf=NULL;
00211 genQueryInp_t gqin;
00212 genQueryOut_t* gqout=NULL;
00213 int i,status;
00214 char condStr[MAX_NAME_LEN];
00215 char* collname;
00216
00217 RE_TEST_MACRO (" Calling msiListColl")
00218
00219
00220 if (rei == NULL || rei->rsComm == NULL) {
00221 rodsLog (LOG_ERROR, "msiListColl: input rei or rsComm is NULL");
00222 return (SYS_INTERNAL_NULL_INPUT_ERR);
00223 }
00224
00225 rsComm = rei->rsComm;
00226
00227
00228 collname = strdup ((char*)collectionname->inOutStruct);
00229
00230
00231 memset (&gqin, 0, sizeof(genQueryInp_t));
00232 gqin.maxRows = MAX_SQL_ROWS;
00233 gqout = (genQueryOut_t*) malloc (sizeof (genQueryOut_t));
00234 memset (gqout, 0, sizeof (genQueryOut_t));
00235 mybuf = (bytesBuf_t *) malloc (sizeof (bytesBuf_t));
00236 memset (mybuf, 0, sizeof (bytesBuf_t));
00237
00238
00239 addInxIval (&gqin.selectInp, COL_COLL_NAME, 1);
00240 addInxIval (&gqin.selectInp, COL_COLL_ID, 1);
00241 genAllInCollQCond (collname, condStr);
00242 addInxVal (&gqin.sqlCondInp, COL_COLL_NAME, condStr);
00243
00244
00245 status = rsGenQuery (rsComm, &gqin, &gqout);
00246
00247 if (status < 0) {
00248 free( mybuf );
00249 return (status);
00250 } else if (status != CAT_NO_ROWS_FOUND) {
00251
00252 collectionName = getSqlResultByInx (gqout, COL_COLL_NAME);
00253 collectionID = getSqlResultByInx (gqout, COL_COLL_ID);
00254 for (i=1; i<gqout->rowCnt; i++) {
00255
00256 char* subcoll;
00257 char tmpstr[MAX_NAME_LEN];
00258
00259 subcoll = &collectionName->value[collectionName->len*i];
00260 sprintf (tmpstr, "%s\n", subcoll );
00261 appendToByteBuf (mybuf, tmpstr);
00262 }
00263
00264 } else {
00265 return (status);
00266 }
00267
00268 fillBufLenInMsParam (buf, mybuf->len, mybuf);
00269 return (rei->status);
00270
00271 }
00272