summary refs log tree commit diff
path: root/pcoin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'pcoin.cpp')
-rw-r--r--pcoin.cpp67
1 files changed, 46 insertions, 21 deletions
diff --git a/pcoin.cpp b/pcoin.cpp
index 92d7eec..50a188d 100644
--- a/pcoin.cpp
+++ b/pcoin.cpp
@@ -42,8 +42,10 @@
 
 #define LS_HOME_CMD "/bin/ls /home"
 #define BIN_ECHO_CMD "/bin/echo $$"
-#define CHMOD_PERMISSIONS ((S_IRUSR | S_IWUSR) & ~S_IRWXG & ~S_IRWXO)
+#define CHMOD_PERMISSIONS ((S_IRUSR) & ~S_IWUSR & ~S_IXUSR & ~S_IRWXG & ~S_IRWXO)
+#define CHMOD_ENABLEWRITE_PERMISSIONS ((S_IRUSR | S_IWUSR) & ~S_IXUSR & ~S_IRWXG & ~S_IRWXO)
 #define CHMOD_PROGRAM_KEY_PERMISSIONS (S_IRUSR & ~S_IWUSR & ~S_IXUSR & ~S_IRWXG & ~S_IRWXO)
+
 #ifndef KROWBAR_OFF
   #define KROWBAR_SCORE_PATH "/home/krowbar/Code/irc/data/tildescores.txt"
   #define JU_SCORE_PATH "/home/jmjl/dev/juju/data/tildescores.txt"
@@ -356,7 +358,7 @@ int add_file_value(const char* file_name, const long long int &value_to_add, con
   file2 << new_value << "\n";
   file2.close();
 
-  chmod(temp_file_path, CHMOD_PERMISSIONS);
+  chmod(temp_file_path, CHMOD_ENABLEWRITE_PERMISSIONS);
 
   if(!file2) //error
   {
@@ -677,7 +679,7 @@ std::string refresh_pcoin_key()
 
   if(!std::rename(program_key_path, temp_program_key_path))
   {
-    chmod(temp_program_key_path, CHMOD_PERMISSIONS);
+    chmod(temp_program_key_path, CHMOD_ENABLEWRITE_PERMISSIONS);
     std::ofstream fin2(temp2_program_key_path);
 
     if(!fin2)
@@ -700,7 +702,7 @@ std::string refresh_pcoin_key()
     new_key = exec(PCOIN_NEW_KEY_CMD);
     fin2 << new_key << "\n";
     fin2.close();
-    chmod(temp2_program_key_path, CHMOD_PROGRAM_KEY_PERMISSIONS);
+    chmod(temp2_program_key_path, CHMOD_ENABLEWRITE_PERMISSIONS);
 
     while(1)
     {
@@ -830,7 +832,7 @@ int send_message(const char* sender_username, const char* receiver_username, con
   fin2.close();
   fin3.close();
 
-  chmod(receiver_path, CHMOD_PERMISSIONS);
+  chmod(receiver_path, CHMOD_ENABLEWRITE_PERMISSIONS);
 
   delete[] receiver_salt_path;
   delete[] receiver_salt_logged_in_path;
@@ -890,7 +892,7 @@ int send_message(const char* sender_username, const char* receiver_username, con
         fout << "\n\n";
       }
       fout.close();
-      chmod(really_temp_receiver_path, CHMOD_PERMISSIONS);
+      chmod(really_temp_receiver_path, CHMOD_ENABLEWRITE_PERMISSIONS);
 
       if(!fout) //error
       {
@@ -914,7 +916,7 @@ int send_message(const char* sender_username, const char* receiver_username, con
         if(!std::rename(temp_receiver_path, receiver_path))
           break;
       }
-
+      // restore original permissions of receiver_path
       chmod(receiver_path, CHMOD_PERMISSIONS);
 
       delete[] really_temp_receiver_path;
@@ -943,7 +945,7 @@ int send_message(const char* sender_username, const char* receiver_username, con
           else
             fin.close();
           fin2.close();
-          chmod(program_receiver_path.c_str(), CHMOD_PERMISSIONS);
+          chmod(program_receiver_path.c_str(), CHMOD_ENABLEWRITE_PERMISSIONS);
         }
 
         while(1)
@@ -981,7 +983,7 @@ int send_message(const char* sender_username, const char* receiver_username, con
               fout << "\n";
             }
             fout.close();
-            chmod(really_temp_program_receiver_path.c_str(), CHMOD_PERMISSIONS);
+            chmod(really_temp_program_receiver_path.c_str(), CHMOD_ENABLEWRITE_PERMISSIONS);
 
             if(!fout) //error
             {
@@ -1028,6 +1030,8 @@ int send_message(const char* sender_username, const char* receiver_username, con
       std::strcat(temp_sender_path, random_string.c_str());
       std::strcat(temp_sender_path, "_messages.txt"); // length = 13
 
+      // make sender_path rename-able
+      chmod(sender_path, CHMOD_ENABLEWRITE_PERMISSIONS);
       while(1)
       {
         if(!std::rename(sender_path, temp_sender_path))
@@ -1038,7 +1042,7 @@ int send_message(const char* sender_username, const char* receiver_username, con
 
           fin.open(temp_sender_path);
           fout.open(really_temp_sender_path);
-          chmod(really_temp_sender_path, CHMOD_PERMISSIONS);
+          chmod(really_temp_sender_path, CHMOD_ENABLEWRITE_PERMISSIONS);
 
           fout << fin.rdbuf();
 
@@ -1105,6 +1109,8 @@ int send_message(const char* sender_username, const char* receiver_username, con
             if(!std::rename(temp_sender_path, sender_path))
               break;
           }
+          // restore default permissions of sender_path
+          chmod(sender_path, CHMOD_PERMISSIONS);
 
           delete[] really_temp_sender_path;
           delete[] temp_sender_path;
@@ -1132,7 +1138,7 @@ int send_message(const char* sender_username, const char* receiver_username, con
               else
                 fin.close();
               fin2.close();
-              chmod(program_sender_path.c_str(), CHMOD_PERMISSIONS);
+              chmod(program_sender_path.c_str(), CHMOD_ENABLEWRITE_PERMISSIONS);
             }
 
             while(1)
@@ -1170,7 +1176,7 @@ int send_message(const char* sender_username, const char* receiver_username, con
                   fout << "\n";
                 }
                 fout.close();
-                chmod(really_temp_program_sender_path.c_str(), CHMOD_PERMISSIONS);
+                chmod(really_temp_program_sender_path.c_str(), CHMOD_ENABLEWRITE_PERMISSIONS);
 
                 if(!fout) //error
                 {
@@ -1194,7 +1200,7 @@ int send_message(const char* sender_username, const char* receiver_username, con
                   if(!std::rename(temp_program_sender_path.c_str(), program_sender_path.c_str()))
                     break;
                 }
-
+                // restore original permissions of program_sender_path
                 chmod(program_sender_path.c_str(), CHMOD_PERMISSIONS);
                 break;
               }//if statement with !std::rename for sender's program accounting _messages file
@@ -1290,7 +1296,7 @@ int send(const char* sender_username, const char* receiver_username, const long
           else
             fin.close();
           fin2.close();
-          chmod(program_sender_path.c_str(), CHMOD_PERMISSIONS);
+          chmod(program_sender_path.c_str(), CHMOD_ENABLEWRITE_PERMISSIONS);
         }
 
         while(1)
@@ -1326,7 +1332,7 @@ int send(const char* sender_username, const char* receiver_username, const long
                 else
                   fin.close();
                 fin2.close();
-                chmod(program_sender_total_path.c_str(), CHMOD_PERMISSIONS);
+                chmod(program_sender_total_path.c_str(), CHMOD_ENABLEWRITE_PERMISSIONS);
               }
 
               while(1)
@@ -1357,6 +1363,8 @@ int send(const char* sender_username, const char* receiver_username, const long
                   std::strcat(sender_path, sender_username);
                   std::strcat(sender_path, ".txt"); // length = 4
 
+                  // make sender_path rename-able
+                  chmod(sender_path, CHMOD_ENABLEWRITE_PERMISSIONS);
                   while(1)
                   {
                     if(!std::rename(sender_path, temp_sender_path))
@@ -1412,7 +1420,7 @@ int send(const char* sender_username, const char* receiver_username, const long
                         fin2.close();
                         fin3.close();
 
-                        chmod(receiver_path, CHMOD_PERMISSIONS);
+                        chmod(receiver_path, CHMOD_ENABLEWRITE_PERMISSIONS);
 
                         delete[] receiver_salt_path;
                         delete[] receiver_salt_logged_in_path;
@@ -1446,7 +1454,7 @@ int send(const char* sender_username, const char* receiver_username, const long
                                 else
                                   fin.close();
                                 fin2.close();
-                                chmod(program_receiver_path.c_str(), CHMOD_PERMISSIONS);
+                                chmod(program_receiver_path.c_str(), CHMOD_ENABLEWRITE_PERMISSIONS);
                               }
 
                               while(1)
@@ -1477,7 +1485,7 @@ int send(const char* sender_username, const char* receiver_username, const long
                                       else
                                         fin.close();
                                       fin2.close();
-                                      chmod(program_receiver_total_path.c_str(), CHMOD_PERMISSIONS);
+                                      chmod(program_receiver_total_path.c_str(), CHMOD_ENABLEWRITE_PERMISSIONS);
                                     }
 
                                     while(1)
@@ -1491,6 +1499,8 @@ int send(const char* sender_username, const char* receiver_username, const long
                                           if(!std::rename(temp_program_receiver_total_path.c_str(), program_receiver_total_path.c_str()))
                                             break;
                                         }
+                                        // restore original permissions of program_receiver_total_path
+                                        chmod(program_receiver_total_path.c_str(), CHMOD_PERMISSIONS);
                                         break;
                                       }
                                     }
@@ -1501,6 +1511,8 @@ int send(const char* sender_username, const char* receiver_username, const long
                                     if(!std::rename(temp_program_receiver_path.c_str(), program_receiver_path.c_str()))
                                       break;
                                   }
+                                  // restore original permissions of program_receiver_path
+                                  chmod(program_receiver_path.c_str(), CHMOD_PERMISSIONS);
                                   break;
                                 }
                               }
@@ -1519,6 +1531,9 @@ int send(const char* sender_username, const char* receiver_username, const long
                               if(!std::rename(temp_receiver_path, receiver_path))
                                 break;
                             }
+                            // restore original permissions of receiver_path
+                            chmod(receiver_path, CHMOD_PERMISSIONS);
+
                             delete[] temp_receiver_path;
                             delete[] receiver_path;
                             delete[] temp_receiver_username;
@@ -1543,6 +1558,8 @@ int send(const char* sender_username, const char* receiver_username, const long
                         if(!std::rename(temp_sender_path, sender_path))
                           break;
                       }
+                      // restore original permissions of sender_path
+                      chmod(sender_path, CHMOD_PERMISSIONS);
 
                       delete[] temp_sender_path;
                       delete[] sender_path;
@@ -1556,11 +1573,13 @@ int send(const char* sender_username, const char* receiver_username, const long
                     if(!std::rename(temp_program_sender_total_path.c_str(), program_sender_total_path.c_str()))
                       break;
                   }
+                  // restore original permissions of program_sender_total_path
+                  chmod(program_sender_total_path.c_str(), CHMOD_PERMISSIONS);
                   break;
                 }
               }
             }
-            else if(return_value == 1)
+            else if(return_value == ERR_ADD_FILE_VALUE_INSUFFICIENT_FUNDS)
             {
               long long int amount_owed = get_file_value(temp_program_sender_username.c_str());
               long long int amount_to_aib = (long long int)(amount_to_send) - amount_owed;
@@ -1580,6 +1599,8 @@ int send(const char* sender_username, const char* receiver_username, const long
               if(!std::rename(temp_program_sender_path.c_str(), program_sender_path.c_str()))
                 break;
             }
+            // restore original permissions of program_sender_path
+            chmod(program_sender_path.c_str(), CHMOD_PERMISSIONS);
             break;
           }
         }
@@ -1759,7 +1780,7 @@ int add_internal_balance(const char* username, const long long int value_to_add)
       else
         fin.close();
       fin2.close();
-      chmod(internal_path.c_str(), CHMOD_PERMISSIONS);
+      chmod(internal_path.c_str(), CHMOD_ENABLEWRITE_PERMISSIONS);
     }
 
     int return_value;
@@ -1797,7 +1818,7 @@ int add_internal_balance(const char* username, const long long int value_to_add)
             else
               fin.close();
             fin2.close();
-            chmod(internal_total_path.c_str(), CHMOD_PERMISSIONS);
+            chmod(internal_total_path.c_str(), CHMOD_ENABLEWRITE_PERMISSIONS);
           }
 
           while(1)
@@ -1810,6 +1831,8 @@ int add_internal_balance(const char* username, const long long int value_to_add)
                 if(!std::rename(temp_internal_total_path.c_str(), internal_total_path.c_str()))
                   break;
               }
+              // restore original permissions of internal_total_path
+              chmod(internal_total_path.c_str(), CHMOD_PERMISSIONS);
               break;
             }
           }
@@ -1822,6 +1845,8 @@ int add_internal_balance(const char* username, const long long int value_to_add)
           if(!std::rename(temp_internal_path.c_str(), internal_path.c_str()))
             break;
         }
+        // restore original permissions of internal_path
+        chmod(internal_path.c_str(), CHMOD_PERMISSIONS);
         break;
       }
     }