OSDN Git Service

added warning at registrating other's device
authorwatanaby <watanaby@users.osdn.jp>
Wed, 18 May 2016 01:34:28 +0000 (10:34 +0900)
committerwatanaby <watanaby@users.osdn.jp>
Wed, 18 May 2016 01:34:28 +0000 (10:34 +0900)
doc/Changes.html
mngsrc/managementdb.c
mngsrc/messages.c
mngsrc/opengatemmng.h
mngsrc/opengatemown.c

index 9a02abc..73bae7b 100644 (file)
@@ -267,6 +267,10 @@ OpengateM History</H3>
        </DT><DD>
        Replaced signal function to NO-RESTART one (openatem-all).
        </DD>
+       <DT>Ver.1.0.2 at 2016.5.18
+       </DT><DD>
+       Added warning message at registrating other user's device (openatem-all).
+       </DD>
 </DL>
 <P>
 <B>Please see GIT on osdn.jp to check the differences between versions.</B> 
index f667314..7b768cb 100644 (file)
@@ -815,6 +815,51 @@ int isMacAddrStatusInactiveInMngDb(char* macAddr){
   return ret;
 }
 
+/******************************************************/
+/* Does the mac address belong to the userid@extraid  */
+/* all-args:(input)                                   */
+/* return value: true(1)=YES, false(0)=NO             */
+/******************************************************/
+int doesMacAddrBelongToUser(char* macAddr, char* userId, char* extraId){
+
+  MYSQL_RES *res=NULL;
+  MYSQL_ROW row;
+  char queryStr[BUFFMAXLN];
+  char existsStr[WORDMAXLN];
+  int exists=FALSE;
+
+  /* prepare query string */
+  snprintf(queryStr, BUFFMAXLN, 
+          "select exists(select * from macaddrs "
+          " where macAddress='%s' and userId='%s' "
+          " and extraId='%s' and status!='D') ",
+          macAddr, userId, extraId);
+
+  /* send SQL query */
+  if (mysql_query(&mysql, queryStr)){
+    err_msg("ERR at %s#%d: mysql query: %s",__FILE__,__LINE__,
+           mysql_error(&mysql));
+    return FALSE;
+  }
+
+  /* store query result */
+  res = mysql_store_result(&mysql);
+
+  /* get a row from query result */
+  row = mysql_fetch_row(res);
+
+  /* if found, return the count */
+  if(row!=NULL){
+    strlcpy(existsStr, row[0], WORDMAXLN);
+    exists=atoi(existsStr);
+  }
+
+  /* free memory area */
+  mysql_free_result(res);
+
+  return exists;
+}
+
 /********************************************
  routines for debugging output
 ********************************************/
@@ -989,3 +1034,12 @@ int IsMacAddrStatusInactiveInMngDb(char* macAddress){
   if(debug>1) err_msg("DEBUG:(%d)<=isMacAddrStatusInactiveInMngDb()",ret);
   return ret;
 }
+
+int DoesMacAddrBelongToUser(char* macAddr, char* userId, char* extraId){
+  int ret;
+  if(debug>1) err_msg("DEBUG:=>doesMacAddrBelongToUser(%s,%s,%s)",
+                     macAddr,userId,extraId);
+  ret=doesMacAddrBelongToUser(macAddr,userId,extraId);
+  if(debug>1) err_msg("DEBUG:(%d)<=doesMacAddrBelongToUser( )",ret);
+  return ret;
+}
index 236c2c2..495bbfe 100644 (file)
@@ -86,7 +86,7 @@ void insertMessageToPage(char* language){
 /******************************/
 char* messagesInEn(int msgNo){
   char* messages[ENDOFLIST];
-  messages[ExistentMacAddr]="Error: Mac address is already registered. Update it in update page.";
+  messages[ExistentMacAddr]="Error: Mac address is already registered. Update or delete it.";
   messages[DeviceCountOver]="Error: Device count reachs to the limit per one user. To register new device, remove a registered device.";
   messages[IllegalMacAddrForm]= "Error: Mac address format is illegal.";
   messages[IllegalCharInDevice]="Error: Not permitted character is found in device name.";
@@ -105,7 +105,7 @@ char* messagesInEn(int msgNo){
   messages[NotSetAdminCookie]="Error: Cannot found admin cookie. Enter from check page.";
   messages[RequestAdminAuth]="Enter Administrator's userID and password.";
   messages[UnallowableAgent]="Cannot recognize the terminal to be allowable.";
-
+  messages[MacBelongToOther]="Accessing terminal belongs to other user. To register the terminal, the user should delete the registration.";
   return messages[msgNo];
 }
 
@@ -114,7 +114,7 @@ char* messagesInEn(int msgNo){
 /*************************************/
 char* messagesInJa(int msgNo){
   char* messages[ENDOFLIST];
-  messages[ExistentMacAddr]= "ã\82¨ã\83©ã\83¼ï¼\9aæ\97¢ç\99»é\8c²ã\81®MACã\82¢ã\83\89ã\83¬ã\82¹ã\81§ã\81\99ã\80\82æ\9b´æ\96°ã\83\9aã\83¼ã\82¸ã\81§æ\9b´æ\96°してください。";
+  messages[ExistentMacAddr]= "ã\82¨ã\83©ã\83¼ï¼\9aæ\97¢ç\99»é\8c²ã\81®MACã\82¢ã\83\89ã\83¬ã\82¹ã\81§ã\81\99ã\80\82æ\9b´æ\96°ã\81¾ã\81\9fã\81¯å\89\8aé\99¤ã\82\92してください。";
   messages[DeviceCountOver]= "エラー:一人当りの許容機器数に達しています。新たな機器を登録するには登録済の一つを削除してください。";
   messages[IllegalMacAddrForm]=  "エラー:MACアドレスの形式が不正です。";
   messages[IllegalCharInDevice]="エラー:許容されていない文字が機器名にあります。";
@@ -133,6 +133,8 @@ char* messagesInJa(int msgNo){
   messages[NotSetAdminCookie]="エラー : 管理者のCookieを取得できません。チェックページから入って下さい。";
   messages[RequestAdminAuth]="管理者のIDとPasswordを入力してください。";
   messages[UnallowableAgent]="登録許容端末と認識できません。";
+  messages[MacBelongToOther]="エラー : 別ユーザIDの登録端末です。再登録するには、そのユーザIDで登録を削除する必要があります。";
+;
   return messages[msgNo];
 }
 
index 87b8d53..1cbbfe5 100644 (file)
@@ -113,7 +113,7 @@ enum errs{ExistentMacAddr,DeviceCountOver,IllegalMacAddrForm,
          IllegalCharInDevice,EmptyDeviceName,IllegalCharInMailAddr,SuspectNat,
          NoInfoInDb,IllegalUserId,IllegalMacAddr,NoService,
          NoDaemon,ModifyCountOver,RegisterSuccess,UpdateSuccess,IllegalCookie,
-         NotSetAdminCookie,RequestAdminAuth,UnallowableAgent,
+         NotSetAdminCookie,RequestAdminAuth,UnallowableAgent,MacBelongToOther,
          ENDOFLIST};
 
 /**********prototypes***************************************/
@@ -197,6 +197,7 @@ int RenameDeviceNameInMngDb(char* macAddr, char* nameStr);
 int RenameMailAddressInMngDb(char* macAddr, char* mailStr);
 int RegOrUpNobodyMacAddr(char* macAddress);
 int IsMacAddrStatusInactiveInMngDb(char* macAddress);
+int DoesMacAddrBelongToUser(char* macAddr, char* userId, char* extraId);
 
 /* workdb.c */
 int SetupSqliteBusyTimeoutValue(void);
index 2f6fdba..f09a779 100644 (file)
@@ -217,9 +217,18 @@ int  main(int argc, char **argv)
     ReturnToRedirectedPage(redirectedUrl, language);
   }
   
-  /* if no execution and the MAC is registered, send back update page */
+  /* if the MAC is registered in management db, */
   else if(IsMacAddrFoundInMngDb(macAddress)){
-    PutUpdatePageToClient(language, userId, extraId, OWNER, redirectedUrl);
+
+    /* and the MAC belongs to the accessing user, put the update page */
+    if(DoesMacAddrBelongToUser(macAddress, userId, extraId)){
+      PutUpdatePageToClient(language, userId, extraId, OWNER, redirectedUrl);
+    }
+    /* otherwise, put deny page */
+    else{
+      SetMessage(MacBelongToOther);
+      PutDenyToClient(language);
+    }    
   }
   
   /* the MAC is not-registered */