int GeUser::modify_user(char* system, char* user, char* password, unsigned int priv, char* fullname, char* description, char* email, char* phone, char* sms) { int sts; UserList* ul; SystemName* sn = new SystemName(system); sts = sn->parse(); if (EVEN(sts)) { delete sn; return sts; } SystemList* sl = find_system(sn); delete sn; if (!sl) return USER__NOSUCHSYSTEM; ul = (UserList*)sl->find_user(user); if (!ul) return USER__NOSUCHUSER; ul->modify(password, priv, fullname, description, email, phone, sms); return USER__SUCCESS; }
int GeUser::get_user_data(char* system, char* user, char* password, pwr_tMask* priv, pwr_tOix* id, char* fullname, char* description, char* email, char* phone, char* sms) { int sts; UserList* ul; SystemName* sn = new SystemName(system); sts = sn->parse(); if (EVEN(sts)) { delete sn; return sts; } SystemList* sl = find_system(sn); delete sn; if (!sl) return USER__NOSUCHSYSTEM; ul = (UserList*)sl->find_user(user); if (!ul) return USER__NOSUCHUSER; ul->get_data(password, priv, id, fullname, description, email, phone, sms); return USER__SUCCESS; }
int GeUser::add_user(char* system, char* user, char* password, pwr_tMask priv, char* fullname, char* description, char* email, char* phone, char* sms, pwr_tOix id) { SystemList* sl; int sts; // Find system SystemName* sn = new SystemName(system); sts = sn->parse(); if (EVEN(sts)) { delete sn; return sts; } sl = find_system(sn); if (!sl) return USER__NOSUCHSYSTEM; if (id == user_cNId) id = get_next_id(); else if (id >= next_id) next_id = id + 1; sl->add_user( id, user, password, priv, fullname, description, email, phone, sms); return USER__SUCCESS; }
void GeUser::print_all(int brief) { SystemList* sl; std::cout << '\n' << "Proview user database " << user_cVersion << "\n\n"; for (sl = root; sl != NULL; sl = sl->next) sl->print_all(brief); std::cout << '\n'; }
void GeUser::print_all( int brief) { SystemList *sl; cout << endl << "Proview user database " << user_cVersion << endl << endl; for ( sl = root; sl != NULL; sl = sl->next) sl->print_all( brief); cout << endl; }
SystemList* SystemList::find_system(SystemName* name) { SystemList* sl; for (sl = childlist; sl; sl = sl->next) { if (str_NoCaseStrcmp(sl->name, name->segment(sl->level)) == 0) { if (name->segments == sl->level + 1) return sl; return sl->find_system(name); } } return NULL; }
void rt_pvd_udb::load_systemgroup( SystemList *systemgroup) { procom_obj item; pwr_sClass_SystemGroupReg *body; char sname[120]; char *s; body = (pwr_sClass_SystemGroupReg *) calloc( 1, sizeof(pwr_sClass_SystemGroupReg)); item.body = body; gu->get_system_name( systemgroup, sname); if (( s = strrchr( sname, '.'))) strcpy( item.name, s+1); else strcpy( item.name, sname); gu->get_system_data( sname, &body->Attributes, &item.oix, body->Description); item.oix++; if ( next_oix <= item.oix) next_oix = item.oix + 1; item.cid = pwr_cClass_SystemGroupReg; item.fthoix = menu_stack[menu_cnt - 1]; item.bwsoix = m_list[item.fthoix].lchoix; if ( item.bwsoix) m_list[item.bwsoix].fwsoix = item.oix; if ( m_list[item.fthoix].fchoix == 0) m_list[item.fthoix].fchoix = item.oix; m_list[item.fthoix].lchoix = item.oix; item.body_size = sizeof(pwr_sClass_SystemGroupReg); menu_stack[menu_cnt] = item.oix; menu_cnt++; if ( m_list.size() <= item.oix + 1) m_list.resize( item.oix + 1); m_list[item.oix] = item; UserList *user = systemgroup->first_user(); while ( user) { load_user( user, systemgroup); user = user->next_user(); } SystemList *sg = systemgroup->first_system(); while ( sg) { load_systemgroup( sg); sg = sg->next_system(); } menu_cnt--; }
int GeUser::get_user( const char *gu_system, const char *gu_user, const char *gu_password, unsigned int *priv) { UserList *ul; SystemList *sl; SystemName *sn, *parent; int sts; char system[80]; char password[80]; char user[80]; cdh_ToLower( system, gu_system); cdh_ToLower( user, gu_user); strcpy( password, gu_password); // Find system sn = new SystemName( system); sts = sn->parse(); if ( EVEN(sts)) { delete sn; return USER__NOSUCHSYSTEM; } while( sn) { sl = find_system( sn); if ( sl) { ul = (UserList *) sl->find_user( user); if ( ul) { sts = ul->check_password( password); if ( EVEN(sts)) return sts; *priv = ul->priv; return USER__SUCCESS; } if ( !(sl->attributes & user_mSystemAttr_UserInherit)) break; } parent = sn->parent(); if ( parent) parent->parse(); delete sn; sn = parent; } return USER__NOSUCHUSER; }
int GeUser::add_system( char* name, pwr_tMask attributes, char* description, pwr_tOix id) { int sts; SystemName* sn = new SystemName(name); sts = sn->parse(); if (EVEN(sts)) { delete sn; return sts; } if (id == user_cNId) id = get_next_id(); else if (id >= next_id) next_id = id + 1; SystemList* sl = find_system(sn); if (sl) return USER__SYSTEMALREXIST; SystemName* parent = sn->parent(); if (!parent) { SystemList* sl; SystemList* system_list = new SystemList(id, name, 0, attributes, description); // Insert as last sibling to root if (!root) root = system_list; else { for (sl = root; sl->next; sl = sl->next) ; sl->next = system_list; } } else { parent->parse(); SystemList* sl = find_system(parent); if (!sl) { delete sn; delete parent; return USER__NOSUCHSYSTEM; } sl->add_system(id, sn, attributes, description); delete parent; } delete sn; return USER__SUCCESS; }
void rt_pvd_udb::load( pwr_tStatus *rsts) { char filename[256]; int sts; if ( gu) gu->clear(); else gu = new GeUser(); sts = dcli_get_defaultfilename( user_cFilename, filename, ""); gu->load( filename); // Create Root object procom_obj rootitem; if ( m_env == pvd_eEnv_Wb) { strcpy( rootitem.name, "UserDatabase"); rootitem.cid = pwr_eClass_PlantHier; rootitem.oix = 0; } else { strcpy( rootitem.name, "VolUserDatabase"); rootitem.cid = pwr_eClass_ExternVolume; rootitem.oix = 0; rootitem.body_size = sizeof(pwr_sExternVolume); rootitem.body = calloc( 1, rootitem.body_size); } m_list.push_back(rootitem); menu_stack[menu_cnt] = rootitem.oix; menu_cnt++; SystemList *systemgroup = gu->root_system(); while ( systemgroup) { load_systemgroup( systemgroup); systemgroup = systemgroup->next_system(); } if ( m_env == pvd_eEnv_Rt) { // Convert to Rt style for ( int i = 1; i < (int)m_list.size(); i++) { if ( m_list[i].bwsoix == 0) m_list[i].bwsoix = m_list[m_list[i].fthoix].lchoix; if ( m_list[i].fwsoix == 0) m_list[i].fwsoix = m_list[m_list[i].fthoix].fchoix; } } }
SystemList *GeUser::find_system( SystemName *name) { SystemList *sl; for ( sl = root; sl; sl = sl->next) { if ( cdh_NoCaseStrcmp( sl->name, name->segment(0)) == 0) { if ( name->segments == sl->level + 1) return sl; return sl->find_system( name); } } return NULL; }
void SystemList::save(std::ofstream& fp) { UserList* ul; SystemList* sl; fp << int(user_eData_System) << '\n'; fp << int(user_eData_SystemName) << FSPACE << name << '\n'; fp << int(user_eData_SystemLevel) << FSPACE << level << '\n'; fp << int(user_eData_SystemAttributes) << FSPACE << attributes << '\n'; fp << int(user_eData_SystemId) << FSPACE << id << '\n'; fp << int(user_eData_SystemDescription) << FSPACE << description << '\n'; for (ul = (UserList*)userlist; ul != NULL; ul = ul->next) ul->save(fp); for (sl = childlist; sl; sl = sl->next) sl->save(fp); fp << int(user_eData_End) << '\n'; }
void SystemList::print_all(int brief) { UserList* ul; SystemList* sl; int i, j; for (i = 0; i < level; i++) std::cout << ". "; std::cout << name; std::cout << " "; for (j = 0; j < int(22 - 2 * i - strlen(name)); j++) std::cout << " "; if (attributes & user_mSystemAttr_UserInherit) std::cout << "UserInherit"; std::cout << '\n'; for (ul = (UserList*)userlist; ul; ul = ul->next) ul->print_all(brief); for (sl = childlist; sl; sl = sl->next) sl->print_all(brief); }
int GeUser::modify_system(char* name, pwr_tMask attributes, char* description) { int sts; SystemName* sn = new SystemName(name); sts = sn->parse(); if (EVEN(sts)) { delete sn; return sts; } SystemList* sl = find_system(sn); if (!sl) { delete sn; return USER__NOSUCHSYSTEM; } sl->modify(attributes, description); return USER__SUCCESS; }
int GeUser::remove_user(char* system, char* user) { int sts; SystemName* sn = new SystemName(system); sts = sn->parse(); if (EVEN(sts)) { delete sn; return sts; } SystemList* sl = find_system(sn); if (!sl) { delete sn; return USER__NOSUCHSYSTEM; } sts = sl->remove_user(user); delete sn; return sts; }
int GeUser::get_system_data( const char* name, pwr_tMask* attributes, pwr_tOix* id, char* description) { int sts; SystemName* sn = new SystemName(name); sts = sn->parse(); if (EVEN(sts)) { delete sn; return sts; } SystemList* sl = find_system(sn); if (!sl) { delete sn; return USER__NOSUCHSYSTEM; } sl->get_data(attributes, id, description); return USER__SUCCESS; }
int GeUser::save(char* filename) { std::ofstream fp; SystemList* sl; fp.open(filename); if (!fp) return USER__FILEOPEN; fp << int(user_eData_GeUser) << '\n'; fp << int(user_eData_GeUserVersion) << FSPACE << user_cVersion << '\n'; fp << int(user_eData_GeNextId) << FSPACE << next_id << '\n'; for (sl = root; sl != NULL; sl = sl->next) sl->save(fp); fp << int(user_eData_End) << '\n'; fp.close(); return 1; }
pwr_tStatus rt_post::mh_alarm_bc( mh_sMessage *MsgP) { ala_uEvent *event = (ala_uEvent *) MsgP; int sts; char str[256]; char user[80]; char group[80]; char *s; pwr_tTime etime, current; pwr_tDeltaTime diff; int rcvnum; char rcv_array[10][80]; char text[400]; if ( !post || post->conf->Disable) return 1; if ( !event->Info.EventFlags & pwr_mEventFlagsMask_Email || !event->Info.EventFlags & pwr_mEventFlagsMask_SMS) return 1; // Skip events older than 10 minutes etime = net_NetTimeToTime( &event->Info.EventTime); time_GetTime( ¤t); time_Adiff( &diff, ¤t, &etime); if ( time_DToFloat( 0, &diff) > 600) return 1; // Check if already handled if ( event->Info.EventFlags & pwr_mEventFlagsMask_Email) { if ( post->email_check( &event->Info.Id)) return 1; else post->email_register( &event->Info.Id); } if ( event->Info.EventFlags & pwr_mEventFlagsMask_SMS) { if ( post->sms_check( &event->Info.Id)) return 1; else post->sms_register( &event->Info.Id); } post->replace_symbol( str, event->Msg.Receiver); rcvnum = dcli_parse( str, ",", "", (char *) rcv_array, sizeof( rcv_array)/sizeof( rcv_array[0]), sizeof( rcv_array[0]), 0); for ( int i = 0; i < rcvnum; i++) { dcli_trim( str, rcv_array[i]); s = strrchr( str, '.'); if ( s) { *s = 0; strncpy( group, post->systemgroup, sizeof(group)); strncat( group, ".", sizeof(group)); strncat( group, str, sizeof(group)); strncpy( user, s+1, sizeof(user)); } else { strncpy( group, post->systemgroup, sizeof(group)); strncpy( user, str, sizeof(user)); } SystemName *sn = new SystemName( group); sts = sn->parse(); if ( EVEN(sts)) { delete sn; errh_Error( "Post systemgroup parse error, %m", sts); continue; } SystemList *sl = post->udb->find_system( sn); delete sn; if ( !sl) { errh_Error( "No such system group, %s", group); continue; } UserList *ul = (UserList *) sl->find_user( user); if ( !ul) { errh_Error( "No such user, %s", user); continue; } if ( event->Info.EventFlags & pwr_mEventFlagsMask_Email && strcmp( post->conf->EmailCmd, "") != 0) { char address[40]; pwr_tCmd cmd; ul->get_email( address, sizeof(address)); post->format_email_text( MsgP, text, sizeof(text)); post->format_cmd( cmd, post->conf->EmailCmd, address, text); if ( post->conf->Options & pwr_mPostOptionsMask_Log) errh_Info( "Email: %s", cmd); system( cmd); post->conf->SentEmail++; } if ( event->Info.EventFlags & pwr_mEventFlagsMask_SMS && strcmp( post->conf->SMS_Cmd, "") != 0) { char sms[40]; pwr_tCmd cmd; ul->get_sms( sms, sizeof(sms)); post->format_sms_text( MsgP, text, sizeof(text)); post->format_cmd( cmd, post->conf->SMS_Cmd, sms, text); if ( post->conf->Options & pwr_mPostOptionsMask_Log) errh_Info( "SMS: %s", cmd); system( cmd); post->conf->SentSMS++; } } return 1; }