00001 #include "integrityChecksMS.h"
00002 #include "icutils.h"
00003
00004
00005
00006 int msiListFields (msParam_t *collinp, msParam_t *fieldinp,
00007 msParam_t *bufout, msParam_t* statout, ruleExecInfo_t *rei) {
00008
00009 genQueryInp_t gqin;
00010 genQueryOut_t *gqout = NULL;
00011 char condStr[MAX_NAME_LEN];
00012 char tmpstr[MAX_NAME_LEN];
00013 rsComm_t *rsComm;
00014 char* collname;
00015 char* fieldname;
00016 sqlResult_t *dataName;
00017 sqlResult_t *dataField;
00018 bytesBuf_t* mybuf=NULL;
00019 int i,j;
00020 int fieldid;
00021
00022 RE_TEST_MACRO (" Calling msiListFields")
00023
00024
00025 if (rei == NULL || rei->rsComm == NULL) {
00026 rodsLog (LOG_ERROR, "msiListFields: input rei or rsComm is NULL");
00027 return (SYS_INTERNAL_NULL_INPUT_ERR);
00028 }
00029
00030 rsComm = rei->rsComm;
00031
00032
00033 mybuf = (bytesBuf_t *) malloc(sizeof(bytesBuf_t));
00034 memset (mybuf, 0, sizeof (bytesBuf_t));
00035 gqout = (genQueryOut_t *) malloc (sizeof (genQueryOut_t));
00036 memset (gqout, 0, sizeof (genQueryOut_t));
00037 memset (&gqin, 0, sizeof (genQueryInp_t));
00038 gqin.maxRows = MAX_SQL_ROWS;
00039
00040
00041 collname = strdup ((char*)collinp->inOutStruct);
00042 fieldname = strdup ((char*)fieldinp->inOutStruct);
00043 if ((fieldid = getAttrIdFromAttrName(fieldname))==NO_COLUMN_NAME_FOUND) {
00044 sprintf (tmpstr, "Field: %s not found in database", fieldname);
00045 appendToByteBuf (mybuf, tmpstr);
00046 free( gqout );
00047 free( collname );
00048 return (-1);
00049 }
00050
00051
00052 addInxIval (&gqin.selectInp, COL_DATA_NAME, 1);
00053 addInxIval (&gqin.selectInp, fieldid, 1);
00054 snprintf (condStr, MAX_NAME_LEN, " = '%s'", collname);
00055 addInxVal (&gqin.sqlCondInp, COL_COLL_NAME, condStr);
00056
00057 j = rsGenQuery (rsComm, &gqin, &gqout);
00058
00059 if (j<0) {
00060 appendToByteBuf (mybuf, "Gen Query Error returned badness");
00061 } else if (j != CAT_NO_ROWS_FOUND) {
00062
00063 printGenQueryOut(stderr, NULL, NULL, gqout);
00064
00065 dataName = getSqlResultByInx (gqout, COL_DATA_NAME);
00066 dataField = getSqlResultByInx (gqout, fieldid);
00067
00068
00069
00070 for (i=0; i<gqout->rowCnt; i++) {
00071 sprintf (tmpstr, "Data object:%s\t%s:%s,", &dataName->value[dataName->len *i], fieldname, &dataField->value[dataField->len *i]);
00072 appendToByteBuf (mybuf, tmpstr);
00073 }
00074
00075 } else appendToByteBuf (mybuf, "No matching rows found");
00076
00077 bufout->type = strdup(GenQueryOut_MS_T);
00078 fillBufLenInMsParam (bufout, mybuf->len, mybuf);
00079 fillIntInMsParam (statout, rei->status);
00080
00081 free( collname );
00082 return(rei->status);
00083
00084 }
00085
00086
00087
00088 int msiTestWritePosInt (msParam_t* mPout1, ruleExecInfo_t *rei) {
00089
00090 int butter=99;
00091
00092 RE_TEST_MACRO (" Calling msiTestWritePosInt")
00093
00094 fillIntInMsParam (mPout1, butter);
00095
00096 return(rei->status);
00097
00098 }
00099
00100
00101 int msiTestForEachExec (msParam_t* mPout1, ruleExecInfo_t *rei) {
00102
00103 int numbers[10];
00104 int i;
00105 bytesBuf_t* mybuf;
00106 char tmpstr[MAX_NAME_LEN];
00107
00108 RE_TEST_MACRO (" Calling msiTestForEachExec")
00109
00110
00111 for (i=0;i<10;i++) numbers[i]=i;
00112
00113 mybuf = (bytesBuf_t *) malloc(sizeof(bytesBuf_t));
00114 memset (mybuf,0, sizeof(bytesBuf_t));
00115
00116
00117 for (i=0;i<10;i++) {
00118 sprintf (tmpstr, "number[%d]=%d,", i, i);
00119 appendToByteBuf (mybuf, tmpstr);
00120 }
00121
00122 mPout1->type = strdup (STR_MS_T);
00123
00124 fillStrInMsParam (mPout1, (char*)mybuf->buf);
00125
00126 return(rei->status);
00127
00128 }
00129
00130
00131 int msiHiThere (msParam_t* mPout1, ruleExecInfo_t *rei) {
00132
00133 char str[]="hi there\n";
00134
00135 RE_TEST_MACRO (" Calling msiHiThere")
00136
00137 fillStrInMsParam (mPout1, str);
00138
00139 return(rei->status);
00140
00141 }
00142
00143
00144 int verifyCollOwners (genQueryOut_t* gqout, char* ownerlist, bytesBuf_t* mybuf) {
00145
00146 sqlResult_t* collName;
00147 sqlResult_t* collOwner;
00148 sqlResult_t* collID;
00149 int ownercount=0;
00150 int i,j;
00151 char* word;
00152 char delims[]=",";
00153 char** olist=NULL;
00154 char tmpstr[MAX_NAME_LEN];
00155
00156 collName = getSqlResultByInx (gqout, COL_COLL_NAME);
00157 collOwner = getSqlResultByInx (gqout, COL_COLL_OWNER_NAME);
00158 collID = getSqlResultByInx (gqout, COL_COLL_ID);
00159
00160
00161 fprintf(stderr, "ownerlist: %s\n", ownerlist);
00162
00163
00164 for (word=strtok(ownerlist, delims); word; word=strtok(NULL, delims)) {
00165
00166 char** tmp_list = 0;
00167 tmp_list = (char**) realloc (olist, sizeof (char*) * (ownercount));
00168 if( !tmp_list ) {
00169 rodsLog( LOG_ERROR, "verifyCollOwners :: realloc failure" );
00170 continue;
00171 } else {
00172 olist = tmp_list;
00173 }
00174 olist[ownercount] = strdup (word);
00175 ownercount++;
00176 }
00177
00178
00179 for (i=0; i<gqout->rowCnt; i++) {
00180 int foundflag=0;
00181 for (j=0; j<ownercount; j++) {
00182 char* thisowner = strdup(&collOwner->value[collOwner->len*i]);
00183 fprintf(stderr, "comparing %s and %s\n", thisowner, olist[j]);
00184 if (!(strcmp(thisowner, olist[j]))) {
00185
00186 foundflag=1;
00187 free( thisowner );
00188 break;
00189 }
00190 }
00191
00192 if (!foundflag) {
00193 snprintf (tmpstr, MAX_NAME_LEN, "Sub Collection: %s with owner: %s does not match input list\n",
00194 &collName->value[collName->len *i], &collOwner->value[collOwner->len * i]);
00195 appendToByteBuf (mybuf, tmpstr);
00196 }
00197 }
00198 free( olist );
00199 return (0);
00200 }
00201
00202
00203 int verifyCollAVU (genQueryOut_t* gqout, char* myavuname, char* myavuvalue, char* myavuattr, bytesBuf_t* mybuf) {
00204
00205
00206
00207
00208
00209 int status = 0;
00210
00211 return (status);
00212 }
00213
00214 int verifyCollACL (genQueryOut_t* gqout, char* myaclname, char* myacltype, bytesBuf_t* mybuf) {
00215 int status = 0;
00216
00217 return (status);
00218 }