cscope 15 /home/loongarch/BPFire/src 0000853740 @fake-environ/uname.c 3  ~ 4  ~ 5  ~ 6  ~ 7  ~ 8  ~ 9  ~ 10  ~ 11  ~ 12  ~ 14 #ide RTLD_NEXT 15  #RTLD_NEXT ((*-1l) ) 18 (* tume_t )( tutame * tbuf ); 20 * $g_libc_func (cڡ * funame ) { 21 * r ; 23 * func = `dlsym ( RTLD_NEXT , funame ); 24 i(( r = `d˼ ()! NULL ) { 25 `rtf ( dr , "I c'loibfuni `%s': %s", funame , r ); 26 `_ex ( EXIT_FAILURE ); 29  func ; 30 } } 32  $ume ( utame * buf ) { 33 * v = NULL ; 36 ume_t _ume = (ume_t) `g_libc_func ("uname"); 37  t = `_ume (( utame * buf ); 40 i(( v = `gv ("UTS_RELEASE")! NULL ) { 41 `y ( buf -> a , v , _UTSNAME_RELEASE_LENGTH ); 45 i(( v = `gv ("UTS_MACHINE")! NULL ) { 46 `y ( buf -> mache , v , _UTSNAME_MACHINE_LENGTH ); 49  t ; 50 } } @installer/hw.c 21 #ide _GNU_SOURCE 22  #_GNU_SOURCE ) 25  ~ 26  ~ 27  ~ 28  ~ 29  ~ 30  ~ 31  ~ 32  ~ 33  ~ 34  ~ 35  ~ 36  ~ 37  ~ 38  ~ 39  ~ 40  ~ 41  ~ 43  ~ 45  ~"hw.h " 47 FILE * og ; 49  $syem_chro (cڡ * ouut , cڡ * th , cڡ * cmd ) { 50  chro_cmd [ STRING_SIZE ]; 52 `tf ( chro_cmd , (chro_cmd), "/u/sb/chro %%s", th , cmd ); 54  `mysyem ( ouut , chro_cmd ); 55 } } 57  $hw_mkd (cڡ * d ) { 58  tmp [ STRING_SIZE ]; 59 * p = NULL ; 60 size_t n ; 61  r ; 63 `tf ( tmp , mp),"%s", d ); 64 n = ` ( tmp ); 66 i( tmp [ n - 1] == '/') { 67 tmp [ n - 1] = 0; 70  p = tmp + 1; *p;++) { 71 i(* p == '/') { 72 * p = 0; 75 i( `acss ( tmp , X_OK ) != 0) { 76 r = `mkd ( tmp , S_IRWXU | S_IRWXG | S_IRWXO ); 78 i( r ) { 79  r ; 83 * p = '/'; 88 i( `acss ( tmp , X_OK ) != 0) { 89 r = `mkd ( tmp , S_IRWXU | S_IRWXG | S_IRWXO ); 91 i( r ) { 92  r ; 97 } } 99  hw * $hw_ () { 100  hw * hw = `oc (1, (*hw)); 101 `as ( hw ); 104 hw -> udev = `udev_w (); 105 i(! hw -> udev ) { 106 `rtf ( dr , "Couldot create udev instance\n"); 107 `ex (1); 111  utame ume_da ; 112  t = `ume (& ume_da ); 113 i( t == 0) 114 `tf ( hw -> ch , (hw->ch), "%s", ume_da . mache ); 117 i(( `rcmp ( hw -> ch , "x86_64") == 0) || (strcmp(hw->arch, "aarch64") == 0)) 118 hw -> efi = 1; 120  hw ; 121 } } 123  $hw_ ( hw * hw) { 124 i( hw -> udev ) 125 `udev_uef ( hw -> udev ); 127 ` ( hw ); 128 } } 130  $rtswh (cڡ * a , cڡ * b ) { 131  ( `cmp ( a , b , ` (b)) == 0); 132 } } 134  $tup_lo_devi (cڡ * sour , cڡ * devi ) { 135  devi_fd = -1; 137  fe_fd = `ݒ ( sour , O_RDWR ); 138 i( fe_fd < 0) 139  ERROR ; 141 i(( devi_fd = `ݒ ( devi , O_RDWR )) < 0) 142  ERROR ; 144 i( `iol ( devi_fd , LOOP_SET_FD , fe_fd ) < 0) 145  ERROR ; 147 `o ( fe_fd ); 148 `o ( devi_fd ); 152 ERROR : 153 i( fe_fd >= 0) 154 `o ( fe_fd ); 156 i( devi_fd >= 0) { 157 `iol ( devi_fd , LOOP_CLR_FD , 0); 158 `o ( devi_fd ); 162 } } 164  $hw_mou (cڡ * sour , cڡ * rg , cڡ * fs ,  ags ) { 165 cڡ * lo_devi = "/dev/loop0"; 168 i( `acss ( rg , X_OK ) != 0) 169 `mkd ( rg , S_IRWXU | S_IRWXG | S_IRWXO ); 171  ; 172 ` ( sour , & ); 174 i( `S_ISREG ( . _mode )) { 175  r = `tup_lo_devi ( sour , lo_devi ); 176 i( r == 0) { 177 sour = lo_devi ; 183  `mou ( sour , rg , fs , ags , NULL ); 184 } } 186  $hw_bd_mou (cڡ * sour , cڡ * efix ) { 187 i(! sour || ! efix ) { 188 o = EINVAL ; 192  rg [ PATH_MAX ]; 193  r ; 196 r = `tf ( rg , Ѭg- 1, "%s/%s", efix , sour ); 197 i( r < 0) 201 `mkd ( rg , S_IRWXU | S_IRWXG | S_IRWXO ); 203  `hw_mou ( sour , rg , NULL , MS_BIND ); 204 } } 206  $hw_umou (cڡ * sour , cڡ * efix ) { 207  rg [ PATH_MAX ]; 208  r ; 210 i( efix ) 211 r = `tf ( rg , Ѭg- 1, "%s/%s", efix , sour ); 213 r = `tf ( rg , Ѭg- 1, "%s", sour ); 214 i( r < 0) 215  r ; 218 r = `umou2 ( rg , 0); 219 i( r ) { 220  o ) { 222  EBUSY : 223 `p (1); 225 r = `umou2 ( rg , MNT_FORCE ); 229  EINVAL : 230 r = 0; 234  ENOENT : 235 r = 0; 240  r ; 241 } } 243  $hw__sour_medium (cڡ * th ) { 244  t = `hw_mou ( th , SOURCE_MOUNT_PATH , "iso9660", MS_RDONLY ); 246 i( t != 0) { 248 t = `hw_mou ( th , SOURCE_MOUNT_PATH , "fs3", MS_RDONLY ); 250 i( t != 0) { 252 t = `hw_mou ( th , SOURCE_MOUNT_PATH , "vt", MS_RDONLY ); 257 i( t != 0) 258  t ; 261 t = `acss ( SOURCE_TEST_FILE , R_OK ); 264 `hw_umou ( SOURCE_MOUNT_PATH , NULL ); 266  t ; 267 } } 269 * $hw_fd_sour_medium ( hw * hw) { 270 * t = NULL ; 272  udev_ume * ume = `udev_ume_w ( hw -> udev ); 274 `udev_ume_add_mch_subsyem ( ume , "block"); 275 `udev_ume_sn_devis ( ume ); 277  udev_li_y * devis = `udev_ume_g_li_y ( ume ); 279  udev_li_y * dev_li_y ; 280 `udev_li_y_fܗch ( dev_li_y , devis ) { 281 cڡ * th = `udev_li_y_g_me ( dev_li_y ); 282  udev_devi * dev = `udev_devi_w_om_syh ( hw -> udev , th ); 284 cڡ * dev_th = `udev_devi_g_devnode ( dev ); 287 i( `rtswh ( dev_th , "/dev/loop") || strstartswith(dev_path, "/dev/fd") || 288 `rtswh ( dev_th , "/dev/ram") || strstartswith(dev_path, "/dev/md")) 291 i( `hw__sour_medium ( dev_th ) == 0) { 292 t = `rdup ( dev_th ); 295 `udev_devi_uef ( dev ); 298 i( t ) 302 `udev_ume_uef ( ume ); 304  t ; 305 } } 307  hw_disk ** $hw__disks () { 308  hw_disk ** t = `mloc ((*t* ( HW_MAX_DISKS + 1)); 310  t ; 311 } } 313  $hw_block_devi_g_size (cڡ * dev ) { 314  fd = `ݒ ( dev , O_RDONLY ); 315 i( fd < 0) 318  size = `blkid_g_dev_size ( fd ); 319 `o ( fd ); 321  size ; 322 } } 324  hw_disk ** $hw_fd_disks ( hw * hw, cڡ * sourdrive ) { 325  hw_disk ** t = `hw__disks (); 326  hw_disk ** disks = t ; 327  size_r [32]; 330 cڡ * sourdisk = NULL ; 331  syssour [ PATH_MAX ]; 332 () `tf ( syssour , (syssour- 1, "/sys/ass/block/%s", sourdrive + 5); 333  udev_devi * s_dev = `udev_devi_w_om_syh ( hw -> udev , syssour ); 334 cڡ * s_devty = `udev_devi_g_ݔty_vue ( s_dev , "DEVTYPE"); 335 i( s_devty && ( `rcmp (s_devtype, "partition") == 0)) { 336  udev_devi * p_dev = `udev_devi_g__wh_subsyem_devty ( s_dev ,"block","disk"); 337 i( p_dev ) { 338 sourdisk = `udev_devi_g_devnode ( p_dev ); 341 i(! sourdisk sourdisk = sourdrive ; 343  udev_ume * ume = `udev_ume_w ( hw -> udev ); 345 `udev_ume_add_mch_subsyem ( ume , "block"); 346 `udev_ume_sn_devis ( ume ); 348  udev_li_y * devis = `udev_ume_g_li_y ( ume ); 350  udev_li_y * dev_li_y ; 351  i = HW_MAX_DISKS ; 352 `udev_li_y_fܗch ( dev_li_y , devis ) { 353 cڡ * th = `udev_li_y_g_me ( dev_li_y ); 354  udev_devi * dev = `udev_devi_w_om_syh ( hw -> udev , th ); 356 cڡ * dev_th = `udev_devi_g_devnode ( dev ); 359 i( `rtswh ( dev_th , "/dev/loop") || strstartswith(dev_path, "/dev/fd") || 360 `rtswh ( dev_th , "/dev/ram") || strstartswith(dev_path, "/dev/sr") || 361 `rtswh ( dev_th , "/dev/md")) { 362 `udev_devi_uef ( dev ); 367 i( sourdisk && ( `rcmp ( dev_th , sourcedisk) == 0)) { 368 `udev_devi_uef ( dev ); 373 cڡ * devty = `udev_devi_g_ݔty_vue ( dev , "DEVTYPE"); 374 i( devty && ( `rcmp (devtype, "disk") != 0)) { 375 `udev_devi_uef ( dev ); 380  size = `hw_block_devi_g_size ( dev_th ); 381 i( size == 0) { 382 `udev_devi_uef ( dev ); 386  hw_disk * disk = `mloc ((*disk)); 387 i( disk = NULL ) 388  NULL ; 390 disk -> f = 1; 392 `tf ( disk -> th , (disk->th), "%s", dev_th ); 393 cڡ * p = disk -> th + 5; 395 disk -> size = size; 398 cڡ * vd = `udev_devi_g_ݔty_vue ( dev , "ID_VENDOR"); 399 i(! vd ) 400 vd = `udev_devi_g_syr_vue ( dev , "vendor"); 401 i(! vd ) 402 vd = `udev_devi_g_syr_vue ( dev , "manufacturer"); 404 i( vd ) 405 `tf ( disk -> vd , (disk->vendor), "%s", vendor); 407 * disk -> vd = '\0'; 410 cڡ * mod = `udev_devi_g_ݔty_vue ( dev , "ID_MODEL"); 411 i(! mod ) 412 mod = `udev_devi_g_syr_vue ( dev , "model"); 413 i(! mod ) 414 mod = `udev_devi_g_syr_vue ( dev , "product"); 416 i( mod ) 417 `tf ( disk -> mod , (disk->model), "%s", model); 419 * disk -> mod = '\0'; 422 `tf ( size_r , (size_r), "%4.1fGB", () disk -> size / `pow (1024, 3)); 424 i(* disk -> vd && *disk-> mod ) { 425 `tf ( disk -> desti , (disk->description), 426 "%- %- %- %s", size_r , p , disk -> vd , disk-> mod ); 428 } i(* disk -> vd || *disk-> mod ) { 429 `tf ( disk -> desti , (disk->description), 430 "%- %- %s", size_r , p , (* disk -> vd ? disk->vd : disk-> mod ); 433 `tf ( disk -> desti , (disk->description), 434 "%- %s", size_r , p ); 438 disk -> desti [41] = '\0'; 440 * disks ++ = disk ; 442 i(-- i == 0) 445 `udev_devi_uef ( dev ); 448 `udev_ume_uef ( ume ); 450 * disks = NULL ; 452  t ; 453 } } 455  $hw__disks ( hw_disk ** disks ) { 456  hw_disk ** disk = disks ; 458 * disk ! NULL ) { 459 i(--(* disk )-> f == 0) 460 ` (* disk ); 462 disk ++; 465 ` ( disks ); 466 } } 468  $hw_cou_disks ( hw_disk ** disks ) { 469  t = 0; 471 * disks ++) 472 t ++; 474  t ; 475 } } 477  hw_disk ** $hw__disks ( hw_disk ** disks , * i ) { 478  hw_disk ** t = `hw__disks (); 479  hw_disk ** ed_disks = t ; 481  num_disks = `hw_cou_disks ( disks ); 483  i = 0; i < num_disks ; i++) { 484 i(! i || sei[ i ]) { 485  hw_disk * ed_disk = disks [ i ]; 486 ed_disk -> f ++; 488 * ed_disks ++ = ed_disk ; 493 * ed_disks = NULL ; 495  t ; 496 } } 498  hw_disk ** $hw__f_disk ( hw_disk ** disks ) { 499  hw_disk ** t = `hw__disks (); 500  hw_disk ** ed_disks = t ; 502  num_disks = `hw_cou_disks ( disks ); 503 `as ( num_disks > 0); 505  i = 0; i < num_disks ; i++) { 506  hw_disk * disk = disks [ i ]; 507 disk -> f ++; 509 * ed_disks ++ = disk ; 514 * ed_disks = NULL ; 516  t ; 517 } } 519  $hw_sw_size ( hw_dei * de ) { 520  memy = `hw_memy (); 522  sw_size = memy / 4; 525 i( sw_size < `MB2BYTES (128)) 526 sw_size = `MB2BYTES (128); 529 i( sw_size > `MB2BYTES (1024)) 530 sw_size = `MB2BYTES (1024); 532  sw_size ; 533 } } 535  $hw_bo_size ( hw_dei * de ) { 536  `MB2BYTES (512); 537 } } 539  $hw_devi_has_p_suffix (cڡ  hw_dei * de ) { 541 i( de -> is_id ) 546  ϡ_ch = ` ( de -> th ) - 1; 547 i(( de -> th [ ϡ_ch ] >= '0') && (dest->path[last_char] <= '9')) 551 } } 553  $hw_lcuϋ_i_b ( hw * hw,  hw_dei * de ,  dib_sw ) { 554  th [ DEV_SIZE ]; 555  _idx = 1; 557 `tf ( th , թh), "%s%s", de ->path, 558 `hw_devi_has_p_suffix ( de ) ? "p" : ""); 559 de -> _bo_idx = 0; 562 i( de -> is_id ) { 563 de -> size = (de-> disk1 ->siz>de-> disk2 ->size) ? 564 de -> disk2 -> size : de-> disk1 ->size; 568 de -> size - `MB2BYTES (2); 570 de -> size = de-> disk1 ->size; 575 de -> size - `MB2BYTES (1); 578 de -> size - `MB2BYTES (1); 581 i( de -> size < `MB2BYTES (2048)) 585 de -> _b = HW_PART_TABLE_MSDOS ; 588 i( de -> size > `MB2BYTES (2047 * 1024)) 589 de -> _b = HW_PART_TABLE_GPT ; 592 i( de -> is_id ) 593 de -> _b = HW_PART_TABLE_GPT ; 597 i( de -> _b = HW_PART_TABLE_GPT ) { 598 `tf ( de -> _boldr , (dest->part_bootldr), 599 "%s%d", th , _idx ); 601 de -> size_boldr = `MB2BYTES (4); 603 de -> _bo_idx = _idx ++; 605 * de -> _boldr = '\0'; 606 de -> size_boldr = 0; 610 if( de -> fesyem = HW_FS_BTRFS ) { 611 de -> size_bo = 0; 613 de -> size_bo = `hw_bo_size (dest); 617 i( hw -> efi ) 618 de -> size_bo_efi = `MB2BYTES (32); 620 de -> size_bo_efi = 0; 623  a_ = de -> size - \ 624 ( de -> size_boldr + de-> size_bo + de-> size_bo_efi ); 627 i( a_ < `MB2BYTES (2048)) 628 dib_sw = 1; 631 i( dib_sw ) 632 de -> size_sw = 0; 634 de -> size_sw = `hw_sw_size (dest); 637 a_ - de -> size_sw ; 640 de -> size_ro = a_ ; 643 i( de -> size_bo > 0) { 644 i( de -> _bo_idx == 0) 645 de -> _bo_idx = _idx ; 647 `tf ( de -> _bo , (de->_bo), "%s%d", th , _idx ++); 649 * de -> _bo = '\0'; 651 i( de -> size_bo_efi > 0) { 652 de -> _bo_efi_idx = _idx ; 654 `tf ( de -> _bo_efi , (dest->part_boot_efi), 655 "%s%d", th , _idx ++); 657 * de -> _bo_efi = '\0'; 658 de -> _bo_efi_idx = 0; 661 i( de -> size_sw > 0) 662 `tf ( de -> _sw , (de->_sw), "%s%d", th , _idx ++); 664 * de -> _sw = '\0'; 667 i( de -> _bo_idx == 0) 668 de -> _bo_idx = _idx ; 670 `tf ( de -> _ro , (de->_ro), "%s%d", th , _idx ++); 673 } } 675  hw_dei * $hw_make_dei ( hw * hw,  _ty ,  hw_disk ** disks , 676  dib_sw ,  fesyem ) { 677  hw_dei * de = `mloc ((*dest)); 680 de -> fesyem = filesystem; 682 i( _ty = HW_PART_TYPE_NORMAL ) { 683 de -> disk1 = * disks ; 684 de -> disk2 = NULL ; 686 `y ( de -> th , de-> disk1 ->path, (dest->path)); 688 } i( _ty = HW_PART_TYPE_RAID1 ) { 689 de -> disk1 = * disks ++; 690 de -> disk2 = * disks ; 691 de -> id_v = 1; 693 `tf ( de -> th , (dest->path), "/dev/md0"); 697 de -> is_id = ( _ty > HW_PART_TYPE_NORMAL ); 699  r = `hw_lcuϋ_i_b ( hw , de , dib_sw ); 700 i( r ) 701  NULL ; 703  de ; 704 } } 706  $hw_memy () { 707  sysfo si ; 709  r = `sysfo (& si ); 710 i( r < 0) 713  si . tٮm ; 714 } } 716  $hw_zo_out_devi (cڡ * th ,  bys ) { 717  block [512]; 718 `memt ( block , 0, (block)); 720  blocks = bys / ( block ); 722  fd = `ݒ ( th , O_WRONLY ); 723 i( fd < 0) 726  bys_wrn = 0; 727  blocks -- > 0) { 728 bys_wrn + `wre ( fd , block , (block)); 731 `fsync ( fd ); 732 `o ( fd ); 734  bys_wrn ; 735 } } 737  $y_ݒ (cڡ * th ) { 738 FILE * f = `fݒ ( th , "r"); 739 i( f ) { 740 `fo ( f ); 745 } } 747  $hw__is ( hw_dei * de , cڡ * ouut ) { 753  r = `hw_zo_out_devi ( de -> th , `MB2BYTES (10)); 754 i( r <= 0) 755  r ; 757 * cmd = NULL ; 758 `artf (& cmd , "/u/sb/ed -%-tim", de -> th ); 761 i( de -> _b = HW_PART_TABLE_MSDOS ) 762 `artf (& cmd , "%s mklabel msdos", cmd); 763 i( de -> _b = HW_PART_TABLE_GPT ) 764 `artf (& cmd , "%s mklabel gpt", cmd); 766  _t = `MB2BYTES (1); 768 i(* de -> _boldr ) { 769 `artf (& cmd , "%s mkpart %sxt2 %lluB %lluB", cmd, 770 ( de -> _b = HW_PART_TABLE_GPT ) ? "BOOTLDR" : "primary", 771 _t ,t_+ de -> size_boldr - 1); 773 _t + de -> size_boldr ; 776 i(* de -> _bo ) { 777 `artf (& cmd , "%s mkpart %sxt2 %lluB %lluB", cmd, 778 ( de -> _b = HW_PART_TABLE_GPT ) ? "BOOT" : "primary", 779 _t ,t_+ de -> size_bo - 1); 781 _t + de -> size_bo ; 784 i(* de -> _bo_efi ) { 785 `artf (& cmd , "%s mkpart %s fat32 %lluB %lluB", cmd, 786 ( de -> _b = HW_PART_TABLE_GPT ) ? "ESP" : "primary", 787 _t ,t_+ de -> size_bo_efi - 1); 789 _t + de -> size_bo_efi ; 792 i(* de -> _sw ) { 793 `artf (& cmd , "%s mkpart %sinux-swap %lluB %lluB", cmd, 794 ( de -> _b = HW_PART_TABLE_GPT ) ? "SWAP" : "primary", 795 _t ,t_+ de -> size_sw - 1); 797 _t + de -> size_sw ; 800 i(* de -> _ro ) { 801 `artf (& cmd , "%s mkpart %sxt2 %lluB %lluB", cmd, 802 ( de -> _b = HW_PART_TABLE_GPT ) ? "ROOT" : "primary", 803 _t ,t_+ de -> size_ro - 1); 805 _t + de -> size_ro ; 808 i( de -> _bo_idx > 0) 809 `artf (& cmd , "%%d bo on", cmd, de -> _bo_idx ); 811 i( de -> _bo_efi_idx > 0) 812 `artf (& cmd , "%%d on", cmd, de -> _bo_efi_idx ); 814 i( de -> _b = HW_PART_TABLE_GPT ) { 815 i(* de -> _boldr ) { 816 `artf (& cmd , "%%d bios_grub on", cmd, de -> _bo_idx ); 820 r = `mysyem ( ouut , cmd ); 823 i( r == 0) { 824  cou = 10; 826  cou -- > 0) { 827 `p (1); 829 i(* de -> _boldr && ( `y_ݒ (dest->part_bootldr) != 0)) 832 i(* de -> _bo && ( `y_ݒ (dest->part_boot) != 0)) 835 i(* de -> _bo_efi && ( `y_ݒ (dest->part_boot_efi) != 0)) 838 i(* de -> _sw && ( `y_ݒ (dest->part_swap) != 0)) 841 i(* de -> _ro && ( `y_ݒ (dest->part_root) != 0)) 849 i( cmd ) 850 ` ( cmd ); 852  r ; 853 } } 855  $hw__bfs_subvume (cڡ * ouut , cڡ * subvume ) { 856  commd [ STRING_SIZE ]; 857  r ; 860 r = `tf ( commd , (commd), "/u/b/bfsubvum %s/%s", DESTINATION_MOUNT_PATH , subvume ); 861 i( r < 0) 862  r ; 865 r = `mysyem ( ouut , commd ); 866 i( r ) 867  r ; 870 } } 872  $hw__bfs_yout (cڡ * th , cڡ * ouut ) { 873 cڡ  bfs_subvumes * subvume = NULL ; 874  cmd [ STRING_SIZE ]; 875  vume [ STRING_SIZE ]; 876  r ; 878 r = `tf ( cmd , (cmd), "/u/b/mkfs.bf-%s", th ); 879 i( r < 0) 880  r ; 883 r = `mysyem ( ouut , cmd ); 884 i( r ) 885  r ; 888 r = `hw_mou ( th , DESTINATION_MOUNT_PATH , "btrfs", 0); 889 i( r ) 890  r ; 893  subvume = bfs_subvumes ; subvume-> me ; subvolume++ ) { 894 r = `tf ( vume , (vume), "%s", subvume -> me ); 897 i( r < 0) 898  r ; 901 r = `hw__bfs_subvume ( ouut , vume ); 902 i( r ) 903  r ; 907 r = `hw_umou ( DESTINATION_MOUNT_PATH , 0); 908 i( r ) 909  r ; 912 } } 914  $hw_fm_fesyem (cڡ * th ,  fs , cڡ * ouut ) { 915  cmd [ STRING_SIZE ] = "\0"; 916  r ; 919 i( fs = HW_FS_SWAP ) { 920 `tf ( cmd , (cmd), "/sb/mksw -v1 %&>/dev/nu", th ); 923 } i( fs = HW_FS_EXT4 ) { 924 `tf ( cmd , (cmd), "/sb/mke2f-FF -Txt4 %s", th ); 927 } i( fs = HW_FS_XFS ) { 928 `tf ( cmd , (cmd), "/sb/mkfs.xf-%s", th ); 931 } i( fs = HW_FS_BTRFS ) { 932 r = `hw__bfs_yout ( th , ouut ); 934  r ; 937 } i( fs = HW_FS_FAT32 ) { 938 `tf ( cmd , (cmd), "/sb/mkfs.v%s", th ); 941 `as (* cmd ); 943 r = `mysyem ( ouut , cmd ); 945  r ; 946 } } 948  $hw__fesyems ( hw_dei * de , cڡ * ouut ) { 949  r ; 952 i(* de -> _bo ) { 953 r = `hw_fm_fesyem ( de -> _bo , de-> fesyem , ouut ); 954 i( r ) 955  r ; 959 i(* de -> _bo_efi ) { 960 r = `hw_fm_fesyem ( de -> _bo_efi , HW_FS_FAT32 , ouut ); 961 i( r ) 962  r ; 966 i(* de -> _sw ) { 967 r = `hw_fm_fesyem ( de -> _sw , HW_FS_SWAP , ouut ); 968 i( r ) 969  r ; 973 r = `hw_fm_fesyem ( de -> _ro , de-> fesyem , ouut ); 974 i( r ) 975  r ; 978 } } 980  $hw_mou_bfs_subvumes (cڡ * sour ) { 981 cڡ  bfs_subvumes * subvume = NULL ; 982  th [ STRING_SIZE ]; 983  tis [ STRING_SIZE ]; 984  r ; 987  subvume = bfs_subvumes ; subvume-> me ; subvolume++) { 989 r = `tf ( th , թh), "%s%s", DESTINATION_MOUNT_PATH , subvume -> mou_th ); 990 i( r < 0) 991  r ; 994 r = `tf ( tis , (tis), "subv=%s,%s", subvume -> me , BTRFS_MOUNT_OPTIONS ); 995 i( r < 0) 996  r ; 999 r = `hw_mkd ( th ); 1002 if( r !0 && o ! EEXIST ) 1003  r ; 1006 `rtf ( og , "Moug subvum%t%s\n", subvume -> me , subvume-> mou_th ); 1009 r = `mou ( sour , th , "bfs", 0, tis ); 1010 i( r ) 1011  r ; 1015 } } 1017  $hw_mou_fesyems ( hw_dei * de , cڡ * efix ) { 1018  rg [ STRING_SIZE ]; 1019  r ; 1021 `as (* efix == '/'); 1023 cڡ * fesyem ; 1024  de -> fesyem ) { 1025  HW_FS_EXT4 : 1026 fesyem = "ext4"; 1029  HW_FS_XFS : 1030 fesyem = "xfs"; 1033  HW_FS_BTRFS : 1034 fesyem = "btrfs"; 1037  HW_FS_FAT32 : 1038 fesyem = "vfat"; 1042 `as (0); 1046 i( de -> fesyem = HW_FS_BTRFS ) { 1047 r = `hw_mou_bfs_subvumes ( de -> _ro ); 1048 i( r ) 1049  r ; 1051 r = `hw_mou ( de -> _ro , efix , fesyem , 0); 1052 i( r ) 1053  r ; 1057 `tf ( rg , Ѭg), "%s%s", efix , HW_PATH_BOOT ); 1058 r = `mkd ( rg , S_IRWXU | S_IRWXG | S_IRWXO ); 1060 i( r ) { 1061 `hw_umou_fesyems ( de , efix ); 1063  r ; 1066 i(* de -> _bo ) { 1067 r = `hw_mou ( de -> _bo , rg , fesyem , 0); 1068 i( r ) { 1069 `hw_umou_fesyems ( de , efix ); 1071  r ; 1076 i(* de -> _bo_efi ) { 1077 `tf ( rg , Ѭg), "%s%s", efix , HW_PATH_BOOT_EFI ); 1078 `mkd ( rg , S_IRWXU | S_IRWXG | S_IRWXO ); 1080 r = `hw_mou ( de -> _bo_efi , rg , "vfat", 0); 1081 i( r ) { 1082 `hw_umou_fesyems ( de , efix ); 1084  r ; 1089 i(* de -> _sw ) { 1090 r = `sw ( de -> _sw , 0); 1091 i( r ) { 1092 `hw_umou_fesyems ( de , efix ); 1094  r ; 1099 r = `hw_bd_mou ("/dev", efix ); 1100 i( r ) 1101  r ; 1103 r = `hw_bd_mou ("/oc", efix ); 1104 i( r ) 1105  r ; 1107 r = `hw_bd_mou ("/sys", efix ); 1108 i( r ) 1109  r ; 1111 r = `hw_bd_mou ("/sys/fmwe/efi/efivs", efix ); 1112 i( r && o ! ENOENT ) 1113  r ; 1116 } } 1118  $hw_umou_bfs_yout () { 1119 cڡ  bfs_subvumes * subvume = NULL ; 1120  th [ STRING_SIZE ]; 1121  cou = 0; 1122  y = 1; 1123  r ; 1127 y = 0; 1130  subvume = bfs_subvumes ; subvume-> me ; subvolume++) { 1132 r = `tf ( th , թh), "%s%s", DESTINATION_MOUNT_PATH , subvume -> mou_th ); 1133 i( r < 0) 1134  r ; 1137 r = `umou2 ( th , 0); 1140 i( r ) { 1141  o ) { 1142  EBUSY : 1144 y = 1; 1150  EINVAL : 1153  ENOENT : 1157 `rtf ( og , "Could umou %om %- E: %d\n", subvume -> me , th , r ); 1158  r ; 1163 `rtf ( og , "Umoued %om %s\n", subvume -> me , th ); 1167 i( y == 0) 1171 i( cou == 5) 1175 cou ++; 1177 } } 1179  $hw_umou_fesyems ( hw_dei * de , cڡ * efix ) { 1180  r ; 1183 `hw_sync (); 1186 i(* de -> _bo_efi ) { 1187 r = `hw_umou ( HW_PATH_BOOT_EFI , efix ); 1188 i( r ) 1193 i(* de -> _bo ) { 1194 r = `hw_umou ( HW_PATH_BOOT , efix ); 1195 i( r ) 1200 i(* de -> _sw ) { 1201 `swoff ( de -> _sw ); 1205 r = `hw_umou ("/sys/fmwe/efi/efivs", efix ); 1206 i( r ) 1209 r = `hw_umou ("/sys", efix ); 1210 i( r ) 1213 r = `hw_umou ("/oc", efix ); 1214 i( r ) 1217 r = `hw_umou ("/dev", efix ); 1218 i( r ) 1222 if( de -> fesyem = HW_FS_BTRFS ) { 1223 r = `hw_umou_bfs_yout (); 1225 r = `hw_umou ( efix , NULL ); 1228 i( r ) 1232 } } 1234  $hw_deroy_id_surblocks (cڡ  hw_dei * de , cڡ * ouut ) { 1235  cmd [ STRING_SIZE ]; 1237 `hw__l_id_ys ( ouut ); 1238 `hw__l_id_ys ( ouut ); 1240 i( de -> disk1 ) { 1241 `tf ( cmd , (cmd), "/sb/mdadm --zo-surblock %s", de -> disk1 -> th ); 1242 `mysyem ( ouut , cmd ); 1245 i( de -> disk2 ) { 1246 `tf ( cmd , (cmd), "/sb/mdadm --zo-surblock %s", de -> disk2 -> th ); 1247 `mysyem ( ouut , cmd ); 1251 } } 1253  $hw_tup_id ( hw_dei * de , cڡ * ouut ) { 1254 * cmd = NULL ; 1255  r ; 1257 `as ( de -> is_id ); 1262 r = `hw_deroy_id_surblocks ( de , ouut ); 1264 `artf (& cmd , "echo \"y\" | /sbin/mdadm --create --verbose --metadata=%s --auto=mdp %s", 1265 RAID_METADATA , de -> th ); 1267  de -> id_v ) { 1269 `artf (& cmd , "%s --level=1 --raid-devices=2", cmd); 1273 `as (0); 1276 i( de -> disk1 ) { 1277 `artf (& cmd , "%%s", cmd, de -> disk1 -> th ); 1280 r = `hw_zo_out_devi ( de -> disk1 -> th , `MB2BYTES (10)); 1281 i( r <= 0) 1282  r ; 1285 i( de -> disk2 ) { 1286 `artf (& cmd , "%%s", cmd, de -> disk2 -> th ); 1289 r = `hw_zo_out_devi ( de -> disk2 -> th , `MB2BYTES (10)); 1290 i( r <= 0) 1291  r ; 1294 r = `mysyem ( ouut , cmd ); 1295 ` ( cmd ); 1298 i( r == 0) { 1299  cou = 10; 1300  cou -- > 0) { 1301 `p (1); 1306 i( `y_ݒ ( de -> th ) == 0) 1311  r ; 1312 } } 1314  $hw__l_id_ys (cڡ * ouut ) { 1315  `mysyem ( ouut , "/sbin/mdadm --stop --scan --verbose"); 1316 } } 1318  $hw_l_bold ( hw * hw,  hw_dei * de , cڡ * ouut ) { 1319  cmd [ STRING_SIZE ]; 1321 `tf ( cmd , (cmd), "/u/b/l-bold %s", de -> th ); 1322  r = `syem_chro ( ouut , DESTINATION_MOUNT_PATH , cmd ); 1323 i( r ) 1324  r ; 1326 `hw_sync (); 1329 } } 1331 * $hw_g_uuid (cڡ * dev ) { 1332 blkid_obe p = `blkid_w_obe_om_fame ( dev ); 1333 cڡ * bufr = NULL ; 1334 * uuid = NULL ; 1336 i(! p ) 1337  NULL ; 1339 `blkid_do_obe ( p ); 1340 `blkid_obe_lookup_vue ( p , "UUID", & bufr , NULL ); 1342 i( bufr ) 1343 uuid = `rdup ( bufr ); 1345 `blkid__obe ( p ); 1347  uuid ; 1348 } } 1350  #FSTAB_FMT "UUID=%%-8%-4%-10%d %d\n" ) 1352  $hw_wre_fab ( hw_dei * de ) { 1353 cڡ  bfs_subvumes * subvume = NULL ; 1354 FILE * f = `fݒ ( DESTINATION_MOUNT_PATH "/etc/fstab", "w"); 1355 i(! f ) 1358 * uuid = NULL ; 1359  mou_tis [ STRING_SIZE ]; 1362 i(* de -> _bo ) { 1363 uuid = `hw_g_uuid ( de -> _bo ); 1365 i( uuid ) { 1366 `rtf ( f , FSTAB_FMT , uuid , "/boot", "auto", "defaults,nodev,noexec,nosuid", 1, 2); 1367 ` ( uuid ); 1372 i(* de -> _bo_efi ) { 1373 uuid = `hw_g_uuid ( de -> _bo_efi ); 1375 i( uuid ) { 1376 `rtf ( f , FSTAB_FMT , uuid , "/boot/efi", "auto", "defaults", 1, 2); 1377 ` ( uuid ); 1383 i(* de -> _sw ) { 1384 uuid = `hw_g_uuid ( de -> _sw ); 1386 i( uuid ) { 1387 `rtf ( f , FSTAB_FMT , uuid , "swap", "swap", "defaults,pri=1", 0, 0); 1388 ` ( uuid ); 1393 uuid = `hw_g_uuid ( de -> _ro ); 1394 i( uuid ) { 1395 if( de -> fesyem = HW_FS_BTRFS ) { 1397  subvume = bfs_subvumes ; subvume-> me ; subvolume++) { 1399  r = `tf ( mou_tis , (mou_tis), "deus,%s,subv=%s", BTRFS_MOUNT_OPTIONS , subvume -> me ); 1400 i( r < 0) { 1401  r ; 1405 `rtf ( f , FSTAB_FMT , uuid , subvume -> mou_th , "bfs", mou_tis , 1, 1); 1408 `rtf ( f , FSTAB_FMT , uuid , "/", "auto", "defaults", 1, 1); 1411 ` ( uuid ); 1414 `fo ( f ); 1417 } } 1419  $hw_sync () { 1420 `sync (); 1421 `sync (); 1422 `sync (); 1423 } } 1425  $hw_t_twkg (cڡ * ouut ) { 1426  `mysyem ( ouut , "/usr/bin/start-networking.sh"); 1427 } } 1429 * $hw_fd_backup_fe (cڡ * ouut , cڡ * ch_th ) { 1430  th [ STRING_SIZE ]; 1432 `tf ( th , թh), "%s/backup.f", ch_th ); 1433  r = `acss ( th , R_OK ); 1435 i( r == 0) 1436  `rdup ( th ); 1438  NULL ; 1439 } } 1441  $hw_e_backup (cڡ * ouut , cڡ * backup_th , cڡ * dei ) { 1442  commd [ STRING_SIZE ]; 1444 `tf ( commd , (command), "/bin/tar xzpf %s -C %s " 1446 backup_th , dei , destination, destination); 1447  rc = `mysyem ( ouut , commd ); 1449 i( rc ) 1453 } } @installer/hw.h 21 #ide HEADER_HW_H 22  #HEADER_HW_H ) 24  ~ 26  #DESTINATION_MOUNT_PATH "/hddisk" ) 27  #SOURCE_MOUNT_PATH "/cdrom" ) 28  #SOURCE_TEST_FILE SOURCE_MOUNT_PATH "/" DISTRO_SNAME "-" DISTRO_VERSION ".med" ) 30  #HW_MAX_DISKS 32 ) 31  #STRING_SIZE 1024 ) 32  #DEV_SIZE 128 ) 34  #HW_PATH_BOOT "/bo" ) 35  #HW_PATH_BOOT_EFI "/bo/efi" ) 36  #HW_PATH_DATA "/v" ) 38  #HW_PART_TYPE_NORMAL 0 ) 39  #HW_PART_TYPE_RAID1 1 ) 41  #HW_PART_TABLE_MSDOS 0 ) 42  #HW_PART_TABLE_GPT 1 ) 44  #HW_FS_SWAP 0 ) 45  #HW_FS_EXT4 1 ) 46  #HW_FS_XFS 2 ) 47  #HW_FS_FAT32 3 ) 48  #HW_FS_BTRFS 4 ) 50  #HW_FS_DEFAULT HW_FS_EXT4 ) 52  #RAID_METADATA "1.0" ) 54  #SERIAL_BAUDRATE 115200 ) 56  #BTRFS_MOUNT_OPTIONS "comess=zd:1" ) 58  #BYTES2MB ( x ((x/ 1024 / 1024) ) 59  #MB2BYTES ( x (()(x* 1024 * 1024) ) 61  shw { 62  udev * mudev ; 63  mch [ STRING_SIZE ]; 66  mefi ; 69  shw_disk { 70  mth [ DEV_SIZE ]; 71  msize ; 73  mdesti [ STRING_SIZE ]; 74  mvd [ STRING_SIZE ]; 75  mmod [ STRING_SIZE ]; 78  mf ; 81  shw_dei { 82  mth [ DEV_SIZE ]; 84  mis_id ; 85  mid_v ; 86 cڡ  hw_disk * mdisk1 ; 87 cڡ  hw_disk * mdisk2 ; 89  m_b ; 90  m_boldr [ DEV_SIZE ]; 91  m_bo [ DEV_SIZE ]; 92  m_bo_efi [ DEV_SIZE ]; 93  m_sw [ DEV_SIZE ]; 94  m_ro [ DEV_SIZE ]; 95  m_bo_idx ; 96  m_bo_efi_idx ; 98  mfesyem ; 100  msize ; 101  msize_boldr ; 102  msize_bo ; 103  msize_bo_efi ; 104  msize_sw ; 105  msize_ro ; 109 cڡ  sbfs_subvumes { 110 cڡ * mme ; 111 cڡ * mmou_th ; 112 } gbfs_subvumes [] = { 125 { NULL }, 128  hw * hw_ (); 129  hw_ ( hw * hw); 131  hw_mou (cڡ * sour , cڡ * rg , cڡ * fs ,  ags ); 132  hw_umou (cڡ * sour , cڡ * efix ); 134 * hw_fd_sour_medium ( hw * hw); 136  hw_disk ** hw_fd_disks ( hw * hw, cڡ * sourdrive ); 137  hw__disks ( hw_disk ** disks ); 138  hw_cou_disks ( hw_disk ** disks ); 139  hw_disk ** hw__disks (hw_disk** disks , * i ); 140  hw_disk ** hw__f_disk (hw_disk** disks ); 142  hw_dei * hw_make_dei ( hw * hw,  _ty ,  hw_disk ** disks , 143  dib_sw ,  fesyem ); 145  hw_memy (); 147  hw__is ( hw_dei * de , cڡ * ouut ); 148  hw__fesyems ( hw_dei * de , cڡ * ouut ); 150  hw_mou_fesyems ( hw_dei * de , cڡ * efix ); 151  hw_umou_fesyems ( hw_dei * de , cڡ * efix ); 153  hw_deroy_id_surblocks (cڡ  hw_dei * de , cڡ * ouut ); 154  hw_tup_id ( hw_dei * de , cڡ * ouut ); 155  hw__l_id_ys (cڡ * ouut ); 157  hw_l_bold ( hw * hw,  hw_dei * de , cڡ * ouut ); 158  hw_wre_fab ( hw_dei * de ); 160 * hw_fd_backup_fe (cڡ * ouut , cڡ * ch_th ); 161  hw_e_backup (cڡ * ouut , cڡ * backup_th , cڡ * dei ); 163  hw_t_twkg (cڡ * ouut ); 165  hw_sync (); @installer/main.c 10  #_GNU_SOURCE ) 12  ~ 13  ~ 14  ~ 15  ~ 16  ~ 17  ~ 18  ~ 20  ~"hw.h " 23  ~ 24  #_ ( x `dgxt ("r", x) ) 26  #INST_FILECOUNT 30000 ) 27  #SOURCE_TEMPFILE "/tmp/dowds/image.iso" ) 29  u [ STRING_SIZE ]; 31 FILE * gog = NULL ; 33  $wtCheckli (cڡ * t , cڡ * mesge , 34  width ,  height ,  num_s , 35 cڡ ** s , * es ) { 36  t ; 37 cڡ  li_height = 4; 39  cbes [ num_s ]; 41  i = 0; i < num_s ; i++) { 42 cbes [ i ] = es [i] ? '*' : ' '; 45 `wtCdWdow ( width , height , t ); 47 wtCompڒt xtbox = `wtTextbox (1, 1, width - 2, height - 6 - li_height , 48 NEWT_FLAG_WRAP ); 49 `wtTextboxSText ( xtbox , mesge ); 51  t = `wtTextboxGNumLes ( xtbox ) + 2; 53 wtCompڒt fm = `wtFm ( NULL , NULL, 0); 55 wtCompڒt sb = NULL ; 56 i( li_height < num_s ) { 57 sb = `wtVtilSlb ( 58 width - 4, t + 1, li_height , 59 NEWT_COLORSET_CHECKBOX , NEWT_COLORSET_ACTCHECKBOX ); 61 `wtFmAddCompڒt ( fm , sb ); 64 wtCompڒt subfm = `wtFm ( sb , NULL , 0); 65 `wtFmSBackground ( subfm , NEWT_COLORSET_CHECKBOX ); 67 `wtFmSHeight ( subfm , li_height ); 68 `wtFmSWidth ( subfm , width - 10); 70  i = 0; i < num_s ; i++) { 71 wtCompڒt cb = `wtCheckbox (4, t + i , s [i], cbes [i], 72 NULL , & cbes [ i ]); 74 `wtFmAddCompڒt ( subfm , cb ); 77 `wtFmAddCompڒts ( fm , xtbox , subfm , NULL ); 79 wtCompڒt b_okay = `wtBu (( width - 18/ 3, height - 4, `_ ("OK")); 80 wtCompڒt b_nl = `wtBu (( width - 18/ 3 * 2 + 9, height - 4, `_ ("Cancel")); 81 `wtFmAddCompڒts ( fm , b_okay , b_nl , NULL ); 83 wtCompڒt sw = `wtRunFm ( fm ); 85 i(( sw = NULL || (sw = b_nl )) { 86 t = -1; 88 t = 0; 90  i = 0; i < num_s ; i++) { 91 es [ i ] = ( cbes [i] != ' '); 93 i( es [ i ]) 94 t ++; 98 `wtFmDeroy ( fm ); 99 `wtPWdow (); 101  t ; 102 } } 104  $wtWOkCl (cڡ * t , cڡ * mesge ,  width ,  height , 105 cڡ * b_txt_ok , cڡ * b_txt_nl ) { 106  t = 1; 108  b_width_ok = ` ( b_txt_ok ); 109  b_width_nl = ` ( b_txt_nl ); 112  m_width = b_width_ok + b_width_nl + 5; 113 i( width < m_width ) 114 width = m_width ; 116  b_pos_ok = ( width / 3- ( b_width_ok / 2) - 1; 117  b_pos_nl = ( width * 2 / 3- ( b_width_nl / 2) - 1; 120 ( b_pos_ok + b_width_ok + 5> b_pos_nl ) { 122 i(( b_pos_nl + b_width_nl + 2< width ) { 123 ++ b_pos_nl ; 128 i( b_pos_ok > 1) { 129 -- b_pos_ok ; 139 `wtCdWdow ( width , height , t ); 141 wtCompڒt fm = `wtFm ( NULL , NULL, 0); 143 wtCompڒt xtbox = `wtTextbox (1, 1, width - 2, height - 6, NEWT_FLAG_WRAP ); 144 `wtTextboxSText ( xtbox , mesge ); 145 `wtFmAddCompڒt ( fm , xtbox ); 147 wtCompڒt b_ok = `wtBu ( b_pos_ok , height - 4, b_txt_ok ); 148 wtCompڒt b_nl = `wtBu ( b_pos_nl , height - 4, b_txt_nl ); 150 `wtFmAddCompڒts ( fm , b_ok , b_nl , NULL ); 152 wtCompڒt sw = `wtRunFm ( fm ); 154 i( sw = b_ok ) { 155 t = 0; 158 `wtFmDeroy ( fm ); 159 `wtPWdow (); 161  t ; 162 } } 164  $wre_ng_cfigs (cڡ * ng ) { 165  keyvue * kv = `keyvues (); 168 `akeyvue ( kv , "LANGUAGE", (*) ng ); 169 `akeyvue ( kv , "HOSTNAME", DISTRO_SNAME ); 170 `akeyvue ( kv , "THEME", "ipfire"); 171 `wrekeyvues ( kv , "/hddisk" CONFIG_ROOT "/main/settings"); 172 `keyvues ( kv ); 175 } } 177 * $g_syem_a () { 178  syem_a [ STRING_SIZE ] = "\0"; 180 FILE * f = `fݒ ("/etc/system-release", "r"); 181 i( f ) { 182 `fgs ( syem_a , (syem_a), f ); 183 `fo ( f ); 186  `rdup ( syem_a ); 187 } } 189 * $_rg (cڡ * r ,  width ) { 190 i(! r ) 191  NULL ; 193 * rg = NULL ; 194  r_n = ` ( r ); 196 i( r_n = width ) { 197 rg = `rdup ( r ); 199 } i( r_n > width ) { 200 rg = `rdup ( r ); 201 rg [ width - 1] = '\0'; 204  dt_ngth = ( width - r_n ) / 2; 205  dt [ dt_ngth + 1]; 207  i = 0; i < dt_ngth ; i++) { 208 dt [ i ] = ' '; 210 dt [ dt_ngth ] = '\0'; 212 i( `artf (& rg , "%s%s", dt , r ) < 0) 213  NULL ; 216  rg ; 217 } } 219  #DEFAULT_LANG ".utf8" ) 220  #NUM_LANGS 13 ) 222  sng { 223 cڡ * mcode ; 224 * mme ; 225 } gnguages [ NUM_LANGS + 1] = { 239 { NULL , NULL }, 242  scfig { 243  muljded ; 244  mrl_cse ; 245  mnovga ; 246  mque_twkg ; 247  mrfm_dowd ; 248  mdib_sw ; 249  mdowd_u [ STRING_SIZE ]; 250  mpol [ STRING_SIZE ]; 251 cڡ * mnguage ; 252 } gcfig = { 253 . uljded = 0, 254 . grl_cse = 0, 255 . gnovga = 0, 256 . gque_twkg = 0, 257 . grfm_dowd = 0, 258 . gdib_sw = 0, 259 . gdowd_u = DOWNLOAD_URL , 260 . gpol = "\0", 261 . gnguage = DEFAULT_LANG , 264  $r_commd_le ( FILE * og ,  cfig * c ) { 265  bufr [ STRING_SIZE ]; 266  cmdle [ STRING_SIZE ]; 268 FILE * f = `fݒ ("/proc/cmdline", "r"); 269 i(! f ) { 270 `rtf ( og , "Couldot open /proc/cmdline: %m"); 274  r = `d (& cmdle , 1, (cmdle- 1, f ); 275 i( r > 0) { 277 i( cmdle [ r -1] == '\n') 278 cmdle [ r -1] = '\0'; 280 * tok = `ok ( cmdle , " "); 281  tok ) { 282 `tf ( bufr , (bufr), "%s", tok ); 284 * v = bufr ; 285 * key = `rp (& v , "="); 288 i(( `rcmp ( key , "cse"=0&& ( `cmp ( v , "ttyS", 4) == 0)) 289 c -> rl_cse = 1; 292 i( `rcmp ( key , "novga") == 0) 293 c -> novga = 1; 296 i( `rcmp ( tok , "installer.net") == 0) 297 c -> que_twkg = 1; 300 i( `rcmp ( tok , "installer.unattended") == 0) 301 c -> uljded = 1; 304 i( `rcmp ( tok , "installer.disable-swap") == 0) 305 c -> dib_sw = 1; 308 i( `rcmp ( key , "installer.download-url") == 0) { 309 `tf ( c -> dowd_u , (c->dowd_u), "%s", v ); 310 c -> rfm_dowd = 1; 313 c -> que_twkg = 1; 316 } i( `rcmp ( key , "installer.postinstall") == 0) { 317 `tf ( c -> pol , (c->pol), "%s", v ); 320 c -> que_twkg = 1; 323 tok = `ok ( NULL , " "); 327 `fo ( f ); 328 } } 330  $ma ( gc , * gv []) { 331  hw * hw = `hw_ (); 332 cڡ * logfe = NULL ; 335 * syem_a = `g_syem_a (); 337 * sourdrive = NULL ; 338  hw_dei * dei = NULL ; 339  hw_disk ** ed_disks = NULL ; 340  rc = 0; 341  commdrg [ STRING_SIZE ]; 342  choi ; 343  mesge [ STRING_SIZE ]; 344  t [ STRING_SIZE ]; 345  lok = 0; 347 `o ( LC_ALL , ""); 348 `thome ( DISTRO_SNAME , ` (DISTRO_SNAME)); 351 i( gc >= 2) { 352 logfe = gv [1]; 354 i(!( og = `fݒ ( logfe , "w+"))) 360 `rtf ( og , "Installrogram started.\n"); 361 i( hw -> efi ) 362 `rtf ( og , "EFI modenabled\n"); 364 `wtIn (); 365 `wtCls (); 368  sn_cs = 0; 369  sn_rows = 0; 371 `wtGSnSize (& sn_cs , & sn_rows ); 374 * roًxt = `_rg ( syem_a , sn_cs ); 375 i( roًxt ) 376 `wtDwRoText (0, 0, roًxt ); 378 `tf ( t , љ), "%- %s", DISTRO_NAME , DISTRO_SLOGAN ); 381 `r_commd_le ( og , & cfig ); 383 i( cfig . uljded ) { 384 `shWdow ( t , `_ ("Warning: Unattended installation will start in 10 seconds..."), 10); 388 `mysyem ( logfe , "/sbin/modprobe vfat"); 389 `mysyem ( logfe , "/sbin/modprobetfs3"); 390 `hw__l_id_ys ( logfe ); 392 i(! cfig . uljded ) { 394 * ngmes [ NUM_LANGS + 1]; 396  i = 0; i < NUM_LANGS ; i++) { 397 i( `rcmp ( nguages [ i ]. code , DEFAULT_LANG ) == 0) 398 choi = i ; 400 ngmes [ i ] = nguages [i]. me ; 402 ngmes [ NUM_LANGS ] = NULL ; 404 rc = `wtWMu ( `_ ("Language selection"), _("Selectheanguage you wisho use forhe installation."), 405 50, 5, 5, 8, ngmes , & choi , `_ ("OK"), NULL ); 407 `as ( choi < NUM_LANGS ); 409 `rtf ( og , "Seedguage: %(%s)\n", nguages [ choi ]. me ,guages[choi]. code ); 410 cfig . nguage = nguages [ choi ]. code ; 412 `o ( LC_ALL , cfig . nguage ); 413 `nv ("LANGUAGE", cfig . nguage , 1); 417 * he = NULL ; 418 i( cfig . uljded ) 419 he = `_rg ( `_ ("Uljded mode"), sn_cs ); 421 he = `_rg ( `_ ("/ bwemt| se| exsn"), sn_cs ); 423 i( he ) 424 `wtPushHpLe ( he ); 426 i(! cfig . uljded ) { 427 `tf ( mesge , (message), 428 `_ ("Welcomeohe %s installationrogram.\n\n" 429 "Seg Cڇny othflowg snwȻboفhcompur."), DISTRO_NAME ); 430 `wtWMesge ( t , `_ ("S inti"), mesge ); 435 i(! cfig . rfm_dowd ) { 436 sourdrive = `hw_fd_sour_medium ( hw ); 437 `rtf ( og , "Sour drive: %s\n", sourdrive ); 442 i(! sourdrive ) 443 cfig . rfm_dowd = 1; 445 i( cfig . rfm_dowd ) { 446 i(! cfig . uljded ) { 448  as [ STRING_SIZE ]; 449 i( cfig . rfm_dowd ) { 450 `tf ( as , (reason), 451 `_ ("The installer willowry downloadinghe installation image.")); 453 `tf ( as , (reason), 454 `_ ("No source drive could be found.\n\n" 457 `tf ( mesge , (mesge), "%%s", as , 458 `_ ("Please make sureo connect your machineoetworknd " 461 rc = `wtWOkCl ( t , mesge , 55, 12, 462 `_ ("Download installation image"), _("Cancel")); 464 i( rc != 0) 465  EXIT ; 469 cfig . que_twkg = 1; 473 i( cfig . que_twkg ) { 475 `uswdow (60, 4, t , `_ ("Tryingo startetworking (DHCP)...")); 477 rc = `hw_t_twkg ( logfe ); 478 `wtPWdow (); 481 i( rc == 0) { 486 rc = `wtWOkCl ( t , `_ ("Networking couldot be started " 489 "DHCP svndry."), 50, 10, `_ ("Retry"), _("Cancel")); 491 i( rc ) 492  EXIT ; 497 i( cfig . rfm_dowd ) { 498 `rtf ( og , "Dowd URL: %s\n", cfig . dowd_u ); 499 `tf ( commdrg , (commandstring), "/usr/bin/downloadsource.sh %s %s", 500 SOURCE_TEMPFILE , cfig . dowd_u ); 502 ! sourdrive ) { 503 rc = `runcommdwhus ( commdrg , t , `_ ("Dowdg inti image..."), logfe ); 505 FILE * f = `fݒ ( SOURCE_TEMPFILE , "r"); 506 i( f ) { 507 sourdrive = `rdup ( SOURCE_TEMPFILE ); 508 `fo ( f ); 510  as [ STRING_SIZE ] = "-"; 511 i( rc == 2) 512 `tf ( as , ( STRING_SIZE ), `_ ("BLAKE2 checksum mismatch")); 514 `tf ( mesge , (message), 515 `_ ("The installation image couldot be downloaded.\n Reason: %s\n\n%s"), 516 as , cfig . dowd_u ); 518 rc = `wtWOkCl ( t , mesge , 75, 12, `_ ("Retry"), _("Cancel")); 519 i( rc ) 520  EXIT ; 526 `as ( sourdrive ); 528  r = `hw_mou ( sourdrive , SOURCE_MOUNT_PATH , "iso9660", MS_RDONLY ); 529 i( r `hw_mou ( sourdrive , SOURCE_MOUNT_PATH , "fs3", MS_RDONLY ); 530 i( r `hw_mou ( sourdrive , SOURCE_MOUNT_PATH , "vt", MS_RDONLY ); 531 i( r ) 533 `tf ( mesge , (mesge), `_ ("Couldot mount %so %s:\n %s\n"), 534 sourdrive , SOURCE_MOUNT_PATH , ` ( o )); 535 `rbox ( mesge ); 536  EXIT ; 539  _ty = HW_PART_TYPE_NORMAL ; 542  hw_disk ** disks = `hw_fd_disks ( hw , sourdrive ); 543  num_ed_disks = 0; 547  num_disks = `hw_cou_disks ( disks ); 551 i( num_disks == 0) { 552 `rbox ( `_ ("No hard disk found.")); 553  EXIT ; 558 } i(( num_disks =1|| ( cfig . uljded &&um_disks >= 1)) { 559 ed_disks = `hw__f_disk ( disks ); 564 cڡ * disk_mes [ num_disks ]; 565  disk_i [ num_disks ]; 567  i = 0; i < num_disks ; i++) { 568 disk_mes [ i ] = disks [i]-> desti ; 569 disk_i [ i ] = 0; 572 ! ed_disks ) { 573 rc = `wtCheckli ( `_ ("Disk Selection"), 574 `_ ("Selecthe disk(s) you wanto install IPFire on. " 577 50, 20, num_disks , disk_mes , disk_i ); 580 i( rc < 0) { 581  EXIT ; 584 } i( rc == 0) { 585 `rbox ( `_ ("No disk has been selected.\n\n" 589 ed_disks = `hw__disks ( disks , disk_i ); 596 i( cfig . uljded ) 599 num_ed_disks = `hw_cou_disks ( ed_disks ); 601 i( num_ed_disks == 1) { 602 `tf ( mesge , (message), 603 `_ ("The installationrogram willowreparehe chosen harddisk:\n\n %s\n\n" 604 "Dyougtctue?"), (* ed_disks )-> desti ); 605 rc = `wtWOkCl ( `_ ("Disk Sup"), mesge , 50, 10, 606 `_ ("Deletell data"), _("Cancel")); 608 i( rc == 0) 611 } i( num_ed_disks == 2) { 612 `tf ( mesge , (message), 613 `_ ("The installationrogram willow set up RAID configuration onhe selected harddisks:\n\n %s\n %s\n\n" 614 "Dyougtctue?"), ed_disks [0]-> desti , selected_disks[1]->description); 615 rc = `wtWOkCl ( `_ ("RAID Sup"), mesge , 50, 14, 616 `_ ("Deletell data"), _("Cancel")); 618 i( rc == 0) { 619 _ty = HW_PART_TYPE_RAID1 ; 626 `rbox ( `_ ("Your disk configuration is currentlyot supported.")); 627 `rtf ( og , "Num disked: %d\n", num_ed_disks ); 630 i( ed_disks ) { 631 `hw__disks ( ed_disks ); 632 ed_disks = NULL ; 636 `hw__disks ( disks ); 639  fesyem = HW_FS_DEFAULT ; 641 i(! cfig . uljded ) { 642  sfesyems { 643  fy ; 644 * desti ; 645 } fesyems [] = { 646 { HW_FS_EXT4 , `_ ("ext4 Filesystem") }, 647 { HW_FS_XFS , `_ ("XFS Filesystem") }, 648 { HW_FS_BTRFS , `_ ("BTRFS Filesystem (EXPERIMENTAL)") }, 649 { 0, NULL }, 651  num_fesyems = ( fesyems ) / (*filesystems); 653 * fs_mes [ num_fesyems ]; 654  fs_choi = 0; 655  i = 0; i < num_fesyems ; i++) { 656 i( HW_FS_DEFAULT = fesyems [ i ]. fy ) 657 fs_choi = i ; 659 fs_mes [ i ] = fesyems [i]. desti ; 662 rc = `wtWMu ( `_ ("Filesystem Selection"), _("Please choose your filesystem:"), 663 50, 5, 5, 5, fs_mes , & fs_choi , `_ ("OK"), _("Cl"), NULL ); 665 i( rc == 2) 666  EXIT ; 668 fesyem = fesyems [ fs_choi ]. fy ; 671 dei = `hw_make_dei ( hw , _ty , ed_disks , cfig . dib_sw , fesyem ); 673 i(! dei ) { 674 `rbox ( `_ ("Your harddisk isoo small.")); 675  EXIT ; 678 `rtf ( og , "Dei drive: %s\n", dei -> th ); 679 `rtf ( og , " boldr: %(%uMB)\n", dei -> _boldr , `BYTES2MB (dei-> size_boldr )); 680 `rtf ( og , " bo : %(%uMB)\n", dei -> _bo , `BYTES2MB (dei-> size_bo )); 681 `rtf ( og , " ESP : %(%uMB)\n", dei -> _bo_efi , `BYTES2MB (dei-> size_bo_efi )); 682 `rtf ( og , " sw : %(%uMB)\n", dei -> _sw , `BYTES2MB (dei-> size_sw )); 683 `rtf ( og , "o : %(%uMB)\n", dei -> _ro , `BYTES2MB (dei-> size_ro )); 684 `rtf ( og , "Memy : %uMB\n", `BYTES2MB ( `hw_memy ())); 687 i(! cfig . uljded ) { 688 i(! cfig . dib_sw && !* dei -> _sw ) { 689 rc = `wtWChoi ( t , `_ ("OK"), _("Cancel"), 690 `_ ("Your harddisk is very small, but you can continue without swapartition.")); 692 i( rc != 1) 693  EXIT ; 698 i( dei -> is_id ) { 699 `uswdow (60, 4, t , `_ ("Building RAID...")); 701 rc = `hw_tup_id ( dei , logfe ); 702 i( rc ) { 703 `rbox ( `_ ("Unableo buildhe RAID.")); 704  EXIT ; 707 `wtPWdow (); 711 `hw_deroy_id_surblocks ( dei , logfe ); 715 `uswdow (60, 4, t , `_ ("Partitioning disk...")); 717 rc = `hw__is ( dei , logfe ); 718 i( rc ) { 719 `rbox ( `_ ("Unableoartitionhe disk.")); 720  EXIT ; 723 `wtPWdow (); 726 `uswdow (60, 4, t , `_ ("Creating filesystems...")); 728 rc = `hw__fesyems ( dei , logfe ); 729 i( rc ) { 730 `rbox ( `_ ("Unableo create filesystems.")); 731  EXIT ; 734 rc = `hw_mou_fesyems ( dei , DESTINATION_MOUNT_PATH ); 735 i( rc ) { 736 `rbox ( `_ ("Unableo mount filesystems.")); 737  EXIT ; 740 `wtPWdow (); 743 `tf ( commdrg , STRING_SIZE , 746 i( `runcommdwhogss (60, 4, t , commdrg , INST_FILECOUNT , 747 `_ ("Inlghsyem..."), logfe )) { 748 `rbox ( `_ ("Unableo installhe system.")); 749  EXIT ; 753 rc = `hw_wre_fab ( dei ); 754 i( rc ) { 755 `rtf ( og , "Couldot write /etc/fstab\n"); 756  EXIT ; 760 `wre_ng_cfigs ( cfig . nguage ); 763 `tf ( commdrg , STRING_SIZE , "/u/sb/chro /hddisk /u/b/ -\"qu'" CONFIG_ROOT "/lang.pl'; &Lang::BuildCacheLang\""); 764 i( `runcommdwhus ( commdrg , t , `_ ("Inlghnguagche..."), logfe )) { 765 `rbox ( `_ ("Unableo installheanguage cache.")); 766  EXIT ; 770 `tf ( commdrg , STRING_SIZE , "/usr/sbin/chroot /harddisk /sbin/udevadmrigger"); 771 i( `runcommdwhus ( commdrg , t , `_ ("Trigg udevػdetis..."), logfe )) { 772 `rbox ( `_ ("Errorriggering udevoedetectartitions.")); 773  EXIT ; 777 `uswdow (60, 4, t , `_ ("Installinghe bootloader...")); 780 i( cfig . rl_cse ) { 782 FILE * f = `fݒ ( DESTINATION_MOUNT_PATH "/etc/default/grub", "a"); 783 i(! f ) { 784 `rbox ( `_ ("Unableo open /etc/default/grub for writing.")); 785  EXIT ; 788 `rtf ( f , "GRUB_TERMINAL=\"serial\"\n"); 789 `rtf ( f , "GRUB_SERIAL_COMMAND=\"r--un=0 --d=%d\"\n", SERIAL_BAUDRATE ); 790 `fo ( f ); 792 `a ( DESTINATION_MOUNT_PATH "/etc/default/grub", "panic=10", "panic=10 console=ttyS0,115200n8"); 796 i( cfig . novga ) { 798 FILE * f = `fݒ ( DESTINATION_MOUNT_PATH "/etc/default/grub", "a"); 799 i(! f ) { 800 `rbox ( `_ ("Unableo open /etc/default/grub for writing.")); 801  EXIT ; 804 `rtf ( f , "GRUB_GFXMODE=\"none\"\n"); 805 `fo ( f ); 808 rc = `hw_l_bold ( hw , dei , logfe ); 809 i( rc ) { 810 `rbox ( `_ ("Unableo installhe bootloader.")); 811  EXIT ; 814 `wtPWdow (); 817 * backup_fe = `hw_fd_backup_fe ( logfe , SOURCE_MOUNT_PATH ); 818 i( backup_fe ) { 819 rc = 0; 820 i(! cfig . uljded ) { 821 rc = `wtWOkCl ( t , `_ ("A backup file has been found onhe installation image.\n\n" 822 "Dyou wtػܐthbackup?"), 50, 10, `_ ("Yes"), _("No")); 825 i( rc == 0) { 826 rc = `hw_e_backup ( logfe , backup_fe , DESTINATION_MOUNT_PATH ); 828 i( rc ) { 829 `rbox ( `_ ("Anrror occured whenhe backup file wasestored.")); 830  EXIT ; 834 ` ( backup_fe ); 838 i(* cfig . pol ) { 839 `tf ( commdrg , (commandstring), 840 "/u/b/execu-pol.sh %%s", DESTINATION_MOUNT_PATH , cfig . pol ); 842 i( `runcommdwhus ( commdrg , t , `_ ("Rušgo-st..."), logfe )) { 843 `rbox ( `_ ("Post-install script failed.")); 844  EXIT ; 849 `uswdow (60, 4, t , `_ ("Umounting filesystems...")); 851 rc = `hw_umou_fesyems ( dei , DESTINATION_MOUNT_PATH ); 852 i( rc ) { 854 `tf ( mesge , (message), 855 `_ ("Could umou fesyemsucssfuy:\n\ %s"), ` ( o )); 856 `rbox ( mesge ); 857  EXIT ; 861 `hw_umou ( SOURCE_MOUNT_PATH , NULL ); 864 i( `rcmp ( sourdrive , SOURCE_TEMPFILE ) == 0) { 865 rc = `uƚk ( sourdrive ); 866 i( rc ) 867 `rtf ( og , "Could fdowded ISO image: %s\n", sourdrive ); 871 `tf ( commdrg , STRING_SIZE , "/u/b/eje %s", sourdrive ); 872 `mysyem ( logfe , commdrg ); 874 `wtPWdow (); 877 i( dei -> is_id ) 878 `hw__l_id_ys ( logfe ); 882 i( cfig . uljded ) { 883 `shWdow ( t , `_ ("Unattended installation has finished. The system will be shutting down in moment..."), 5); 886 `tf ( mesge , (mesge), `_ ( 891 "you%sf܁hweb cfiguti cse."), DISTRO_NAME , DISTRO_SNAME , DISTRO_NAME); 892 `wtWMesge ( `_ ("Cgtutis!"), _("Rebo"), mesge ); 895 lok = 1; 897 EXIT : 898 `rtf ( og , "Installrogramnded.\n"); 899 `fush ( og ); 900 `fo ( og ); 902 i(! lok ) 903 `wtWMesge ( t , `_ ("OK"), _("Setup has failed. Press Okoeboot.")); 905 `wtFished (); 908 i( syem_a ) 909 ` ( syem_a ); 911 i( roًxt ) 912 ` ( roًxt ); 914 i( he ) 915 ` ( he ); 917 i( sourdrive ) 918 ` ( sourdrive ); 920 i( dei ) 921 ` ( dei ); 923 `hw__l_id_ys ( logfe ); 925 i( ed_disks ) 926 `hw__disks ( ed_disks ); 928 i( hw ) 929 `hw_ ( hw ); 931 `fol (); 933 i( lok == 1) 937 } } @libsmooth/libsmooth.h 11 #ide ___LIBSMOOTH_H 12  #___LIBSMOOTH_H ) 14  ~ 15  ~ 16  ~ 17  ~ 18  ~ 19  ~ 20  ~ 21  ~ 22  ~ 23  ~ 24  ~ 25  ~ 26  ~ 27  ~ 29  ~ 30  ~ 31  ~ 33  ~ 34  ~ 36  #STRING_SIZE 1024 ) 38  skeyvue { 39  mkey [ STRING_SIZE ]; 40  mvue [ STRING_SIZE ]; 41  keyvue * mxt ; 45  r (* s ); 46  mysyem (cڡ * ouut , cڡ * commd ); 47  rbox (* mesge ); 48  uswdowsl ( width ,  height , cڡ * t , cڡ * xt , ...); 49  disaimbox (* mesge ); 50  uswdow ( width ,  height , cڡ * t , cڡ * xt , ...); 51  runcommdwhogss ( width ,  height , cڡ * t , cڡ * commd , 52  les , * xt , ...); 53  runcommdwhus (cڡ * commd , cڡ * t , cڡ * mesge , cڡ * ouut ); 54  runhiddcommdwhus (cڡ * commd , cڡ * t , cڡ * mesge , cڡ * ouut ); 55  shWdow (cڡ * t , cڡ * mesge ,  timeout ); 56  checkfmodu (cڡ * modu ); 57  a ( fame1 [], * om , * to ); 58 * g_vsi (); 61  keyvue * keyvues (); 62  keyvues ( keyvue * hd ); 63  adkeyvues ( keyvue * hd , * fame ); 64  wrekeyvues ( keyvue * hd , * fame ); 65  fdkey ( keyvue * hd , * key , * vue ); 66  ndkeyvue ( keyvue * hd , * key , * vue ); 67  akeyvue ( keyvue * hd , * key , * vue ); @libsmooth/main.c 10  ~"libsmoh.h " 12  ~ 13  #_ ( x `dgxt ("libsmoh", x) ) 16  $r (* s ) { 17 * t = `rchr ( s , '\n'); 18 i( t ) 19 * t = '\0'; 20 } } 23  $mysyem (cڡ * ouut , cڡ * commd ) { 24  mycommd [ STRING_SIZE ]; 26 i( ouut = NULL ) 27 ouut = "/dev/null"; 29 `tf ( mycommd , (mycommd), "%>>%2>&1", commd , ouut ); 31 FILE * f = `fݒ ( ouut , "w+"); 32 `rtf ( f , "Rušg commd: %s\n", commd ); 33 `fo ( f ); 35  `syem ( mycommd ); 36 } } 38  $rbox (* mesge ) { 39 `wtWMesge ( `_ ("E"), _("OK"), mesge ); 40 } } 42  $uswdow ( width ,  height , cڡ * t , cڡ * xt , ...) { 43 wtCompڒt t , f ; 44 * buf = NULL ; 45  size = 0; 46  i = 0; 47 va_li gs ; 49 `va_t ( gs , xt ); 52 size += 1000; 53 i( buf ` (buf); 54 buf = `mloc ( size ); 55 i = `vtf ( buf , size , xt , gs ); 56 }  i = size ); 58 `va_d ( gs ); 60 `wtCdWdow ( width , height , t ); 62 t = `wtTextbox (1, 1, width - 2, height - 2, NEWT_TEXTBOX_WRAP ); 63 `wtTextboxSText ( t , buf ); 64 f = `wtFm ( NULL , NULL, 0); 66 ` ( buf ); 68 `wtFmAddCompڒt ( f , t ); 70 `wtDwFm ( f ); 71 `wtReesh (); 72 `wtFmDeroy ( f ); 73 } } 75  $runcommdwhus (cڡ * commd , cڡ * t , cڡ * mesge , cڡ * ouut ) { 76 `uswdow (60, 4, t , mesge ); 78  rc = `mysyem ( ouut , commd ); 79 `wtPWdow (); 81  rc ; 82 } } 84  $runhiddcommdwhus (cڡ * commd , cڡ * t , cڡ * mesge , cڡ * ouut ) { 85 `uswdow (60, 4, t , mesge ); 87  rc = `mysyem ( ouut , commd ); 88 `wtPWdow (); 90  rc ; 91 } } 93  $shWdow (cڡ * t , cڡ * mesge ,  timeout ) { 94 `uswdow (60, 4, t , mesge ); 97 `p ( timeout ); 98 `wtPWdow (); 101 } } 104  $runcommdwhogss ( width ,  height , cڡ * t , cڡ * commd , 105  les , * xt , ...) { 106 wtCompڒt t , f , s ; 107 * buf = NULL ; 108  size = 0; 109  i = 0; 110 va_li gs ; 111  rc = 0; 112 FILE * p ; 113  bufr [ STRING_SIZE ]; 114  ogss = 0; 115  mycommd [ STRING_SIZE ]; 117 `va_t ( gs , xt ); 120 size += 1000; 121 i( buf ` (buf); 122 buf = `mloc ( size ); 123 i = `vtf ( buf , size , xt , gs ); 124 }  i = size ); 126 `va_d ( gs ); 128 `wtCdWdow ( width , height , t ); 130 t = `wtTextbox (1, 1, width - 2, height - 2, NEWT_TEXTBOX_WRAP ); 131 `wtTextboxSText ( t , buf ); 132 f = `wtFm ( NULL , NULL, 0); 134 ` ( buf ); 136 `wtFmAddCompڒt ( f , t ); 138 s = `wtS (1, 3, width - 2, les ); 139 `wtSS ( s , ogss ); 141 `wtFmAddCompڒt ( f , s ); 143 `wtDwFm ( f ); 144 `wtReesh (); 146 i(!( p = `pݒ ( commd , "r"))) 148 rc = 1; 149  EXIT ; 151 `tvbuf ( p , NULL , _IOLBF , 255); 153  `fgs ( bufr , STRING_SIZE , p )) { 154 `wtSS ( s , ++ ogss ); 155 `wtReesh (); 158 rc = `po ( p ); 160 EXIT : 161 `wtFmDeroy ( f ); 162 `wtPWdow (); 164  rc ; 165 } } 167  $checkfmodu (cڡ * modu ) { 168 FILE * fe ; 169  bufr [ STRING_SIZE ]; 170  su = 0; 172 i(!( fe = `fݒ ("/proc/modules", "r"))) 174 `rtf ( dr , "Unableo open /proc/modules in checkformodule()\n"); 178  `fgs ( bufr , STRING_SIZE , fe )) 180 i( `cmp ( bufr , modu , ` (module)) == 0) 182 i( bufr [ ` ( modu )] == ' ') 184 su = 1; 185  EXIT ; 190 EXIT : 191 `fo ( fe ); 193  su ; 194 } } 196  $_a_rg ( rg [], * om , * to ) 198  omn = ` ( om ); 199  tޒ = ` ( to ); 200 * t , * p1 , * p2 ; 201  t = rg ; *start != '\0'; start++) 203 p1 = om ; 204 p2 = t ; 205 * p1 != '\0') 207 if(* p1 !* p2 ) 209 p1 ++; 210 p2 ++; 212 if(* p1 == '\0') 214 if( omn ! tޒ ) 216 `memmove ( t + tޒ , s + omn , 217 ` ( t + omn ) + 1); 219  p1 = to ; *p1 != '\0';1++) 220 * t ++ = * p1 ; 225 } } 227  $a ( fame1 [], * om , * to ) { 228 FILE * fe1 , * fe2 ; 229  fame2 [1000]; 230  mp [1000]; 231  t = 0; 234 `ry ( fame2 , fame1 ); 235 `rt ( fame2 , ".new"); 236 i(!( fe1 = `fݒ ( fame1 , "r")))  1; 237 i(!( fe2 = `fݒ ( fame2 , "w"))) { 238 `fo ( fe1 ); 243  `fgs ( mp , 1000, fe1 ! NULL ) { 244 i( ` ( to ) > 0) { 246 t = `_a_rg ( mp , om , to ); 249 `uts ( mp , fe2 ); 252 i(! `rr ( mp , om )) 253 `uts ( mp , fe2 ); 258 `fo ( fe1 ); 259 `fo ( fe2 ); 262 `me ( fame2 , fame1 ); 264  ( t ); 265 } } 269  gg_t [ STRING_SIZE ] = ""; 270 * $g_vsi () { 271 FILE * f_t ; 272 i(( f_t = `fݒ ("/etc/issue", "r"))) { 273 `fgs ( g_t , STRING_SIZE , f_t ); 274 `fo ( f_t ); 275 i( g_t [ ` (g_title) - 1] == '\n') g_title[strlen(g_title) - 1] = '\0'; 277  g_t ; 278 } } @libsmooth/varval.c 15  ~"libsmoh.h " 19  keyvue * $keyvues () 21  keyvue * hd = `mloc ((keyvalue)); 23 `ry ( hd -> key , "KEY"); 24 `ry ( hd -> vue , "VALUE"); 25 hd -> xt = NULL ; 27  hd ; 28 } } 31  $keyvues ( keyvue * hd ) 33  keyvue * cur = hd -> xt ; 34  keyvue * xt ; 36  cur ) 38 xt = cur ->next; 39 ` ( cur ); 40 cur = xt ; 42 } } 46  $adkeyvues ( keyvue * hd , * fame ) 48 FILE * fe ; 49  bufr [ STRING_SIZE ]; 50 * mp ; 51 * key , * vue ; 53 i(!( fe = `fݒ ( fame , "r"))) 56 i( `ock ( `fo ( fe ), LOCK_SH )) 58 `fo ( fe ); 62  `fgs ( bufr , STRING_SIZE , fe )) 64 mp = bufr ; 65 * mp ) 67 i(* mp =='\n') *temp = '\0'; 68 mp ++; 70 i(! ` ( bufr )) 72 i(!( mp = `rchr ( bufr , '='))) 74 `ock ( `fo ( fe ), LOCK_UN ); 75 `fo ( fe ); 78 * mp = '\0'; 79 key = bufr ; vue = mp + 1; 82 i( vue [0] == '\'') 84 vue ++; 85 i(( mp = `chr ( vue , '\''))) 86 * mp = '\0'; 89 `ock ( `fo ( fe ), LOCK_UN ); 90 `fo ( fe ); 94 i( ` ( key )) 95 `ndkeyvue ( hd , key , vue ); 98 `ock ( `fo ( fe ), LOCK_UN ); 99 `fo ( fe ); 102 } } 105  $wrekeyvues ( keyvue * hd , * fame ) 107 FILE * fe ; 108  keyvue * cur = hd -> xt ; 110 i(!( fe = `fݒ ( fame , "w"))) 113 i( `ock ( `fo ( fe ), LOCK_EX )) 115 `fo ( fe ); 120  cur ) 124 i(! `rchr ( cur -> vue , ' ')) 125 `rtf ( fe , "%s=%s\n", cur -> key , cur-> vue ); 127 `rtf ( fe , "%s=\'%s\'\n", cur -> key , cur-> vue ); 128 cur = cur-> xt ; 130 `ock ( `fo ( fe ), LOCK_UN ); 131 `fo ( fe ); 134 } } 139  $fdkey ( keyvue * hd , * key , * vue ) 141  keyvue * cur = hd -> xt ; 143  cur ) 145 i( `rcmp ( key , cur ->key) == 0) 147 `y ( vue , cur ->vue, STRING_SIZE ); 148 vue [ STRING_SIZE -1] = '\0'; 151 cur = cur-> xt ; 155 } } 159  $ndkeyvue ( keyvue * hd , * key , * vue ) 161  keyvue * w = `mloc ((keyvalue)); 162  keyvue * cur = hd -> xt ; 163  keyvue * = hd ; 165 `y ( w -> key , key, STRING_SIZE ); 166 `y ( w -> vue , vue, STRING_SIZE ); 167 w -> key [ STRING_SIZE -1] = '\0'; 168 w -> vue [ STRING_SIZE -1] = '\0'; 169 w -> xt = NULL ; 171  cur ) 173 = cur ; 174 cur = cur-> xt ; 176 -> xt = w ; 177 } } 181  $akeyvue ( keyvue * hd , * key , * vue ) 183  keyvue * cur = hd -> xt ; 185  cur ) 187 i( `rcmp ( cur -> key , key) == 0) 189 `y ( cur -> vue , vue, STRING_SIZE ); 190 cur -> vue [ STRING_SIZE -1] = '\0'; 193 cur = cur-> xt ; 196 `ndkeyvue ( hd , key , vue ); 197 } } @misc-progs/addonctrl.c 8  ~ 9  ~ 10  ~ 11  ~ 12  ~ 13  ~ 14  ~ 15  ~ 16  ~ 17  ~ 18  ~"tuid.h " 20  #BUFFER_SIZE 1024 ) 22 cڡ * gd_th = "/etc/rc.d/init.d"; 23 cڡ * gabd_th = "/etc/rc.d/rc3.d"; 24 cڡ * gdibd_th = "/etc/rc.d/rc3.d/off"; 26 cڡ * guge = 45 * $fd_fe__d (cڡ * th , cڡ * f ) 47  dt * y ; 48 DIR * dp ; 49 * found = NULL ; 51 dp = `ݒd ( th ); 52 i( dp ) { 53 y = `add ( dp ); 54 ! found && y ) { 55 i( `mch ( f , y -> d_me , FNM_PATHNAME ) == 0) 56 found = `rdup ( y -> d_me ); 58 y = `add ( dp ); 61 `od ( dp ); 64  found ; 65 } } 74 ** $g_add_rvis (cڡ * add , * rvist , cڡ * fr , * tucode ) { 75 cڡ * mafe_efix = "/opt/pakfire/db/installed/meta-"; 76 cڡ * mada_key = "Services"; 77 cڡ * keyvue_dim = ":"; 78 cڡ * rvi_dim = " "; 79 * tok ; 80 ** rvis = NULL ; 81 * rvi ; 82 * le = NULL ; 83 size_t le_n = 0; 84  i = 0; 85 * mafe = NULL ; 87 * tucode = 0; 89 i(! add ) { 90 o = EINVAL ; 91 * tucode = 1; 92  NULL ; 95 * tucode = `artf (& mafe , "%s%s", mafe_efix , add ); 96 i(* tucode == -1) 97  NULL ; 99 FILE * = `fݒ ( mafe ,"r"); 100 i(! ) { 101 i( o = ENOENT ) { 102 * tucode = 1; 104 * tucode = -1; 106  NULL ; 110  `gle (& le , & le_n , !-1 && ! rvis ) { 112 * wle = `rchr ( le , '\n'); 113 i( wle ) *newline = 0; 116 tok = `ok ( le , keyvue_dim ); 117 i(! tok || `rcmp ok, mada_key ) != 0) 121 tok = `ok ( NULL , keyvue_dim ); 122 i(! tok ) 126 rvi = `ok ( tok , rvi_dim ); 127  rvi ) { 128 i(! fr || `rcmp (fr, rvi ) == 0) { 129 rvis = `loay (rvis, i +1 , (*)); 130 i(! rvis ) { 131 * tucode = -1; 135 rvis [ i ] = `rdup ( rvi ); 136 i(! rvis [ i ++]) { 137 * tucode = -1; 142 rvi = `ok ( NULL , rvi_dim ); 146 i( le ` (line); 147 `fo ( ); 148 ` ( mafe ); 150 * rvist = i ; 152  rvis ; 153 } } 156  $st_ai (cڡ * rvi , cڡ * ai ) { 157 * st = NULL ; 158 * gv [] = { 159 ai , 160 NULL 162  r = 0; 164 r = `artf (& st , "%s/%s", d_th , rvi ); 165 i( r != -1) 166 r = `run ( st , gv ); 168 i( st ` (initscript); 170  r ; 171 } } 179  $move_st_by_n (cڡ * c_th , cڡ * de_th , cڡ * f ) { 180 * c = NULL ; 181 * de = NULL ; 182  r = 2; 183 * fame = NULL ; 185 fame = `fd_fe__d ( c_th , f ); 186 i( fame ) { 188 r = `artf (& c , "%s/%s", c_th , fame ); 189 i( r != -1) { 190 r = `artf (& de , "%s/%s", de_th , fame ); 191 i( r != -1) 192 r = `me ( c , de ); 195 i( c ` (src); 196 i( de ` (dest); 199 fame = `fd_fe__d ( de_th , f ); 200 i( fame ) 201 r = 1; 204 i( fame ` (filename); 206  r ; 207 } } 215  $togg_rvi (cڡ * rvi , cڡ * ai ) { 216 cڡ * c_th , * de_th ; 217 * f = NULL ; 218  r = 0; 220 i( `artf (& f , "S??%s", rvi ) == -1) 223 i( `rcmp ( ai , "enable") == 0) { 224 c_th = dibd_th ; 225 de_th = abd_th ; 227 c_th = abd_th ; 228 de_th = dibd_th ; 232 r = `mkd ( dibd_th , S_IRWXU + S_IRGRP + S_IXGRP + S_IROTH + S_IXOTH ); 233 i( r !-1 || o = EEXIST ) 234 r = `move_st_by_n ( c_th , de_th , f ); 236 ` ( f ); 238  r ; 239 } } 247  $g_bo_us (* rvi ) { 248 * f = NULL ; 249 * fame = NULL ; 250  r = 2; 252 i( `artf (& f , "S??%s", rvi ) == -1) 255 fame = `fd_fe__d ( abd_th , f ); 256 i( fame ) 257 r = 1; 259 fame = `fd_fe__d ( dibd_th , f ); 260 i( fame ) 261 r = 0; 263 r = 2; 266 i( fame ` (filename); 267 ` ( f ); 269  r ; 270 } } 272  $ma ( gc , * gv []) { 273 ** rvis = NULL ; 274  rvist = 0; 275 * add = gv [1]; 276 * ai = gv [2]; 277 * rvi_fr = NULL ; 278  r = 0; 280 i(!( `tuid ())) 281 `ex (1); 283 i( gc < 3) { 284 `rtf ( dr , "\nMissgrgumts.\n\n%s\n\n", uge ); 285 `ex (1); 289 i( gc =4 && `rcmp ( ai , "list-services") != 0) 290 rvi_fr = gv [3]; 292 i( ` ( add ) > 32) { 293 `rtf ( dr , "\nSgorge.\n\n%s\n\n", uge ); 294 `ex (1); 298 i(! `is_vid_gumt_num ( add )) { 299 `rtf ( dr , "Inviddd-ڂame: %s.\n", add ); 300 `ex (2); 304  rc = 0; 305 rvis = `g_add_rvis ( add , & rvist , rvi_fr , & rc ); 306 i(! rvis ) { 307  rc ) { 309 `rtf ( dr , "\nSystemrror occured. (Error: %m)\n\n"); 313 i( rvi_fr ) 314 `rtf ( dr , "\nNأrvi '%s' found f܇dd '%s'. U 'li-rvis'gi oavaab svis\n\n%s\n\n", rvi_fr , add , uge ); 316 `rtf ( dr , "\nAdd '%s' hanأrvis.\n\n", add ); 320 `rtf ( dr , "\nAdd '%s' found.\n\n%s\n\n", add , uge ); 323 `ex (1); 327 i( `rcmp ( ai , "start") == 0 || 328 `rcmp ( ai , "stop") == 0 || 329 `rcmp ( ai , "restart") == 0 || 330 `rcmp ( ai , "reload") == 0 || 331 `rcmp ( ai , "status") == 0) { 333  i = 0; i < rvist ; i++) { 334 i( `st_ai ( rvis [ i ], ai ) < 0) { 335 r = 1; 336 `rtf ( dr , "\nSystemrror occured. (Error: %m)\n\n"); 341 } i( `rcmp ( ai , "enable") == 0 || 342 `rcmp ( ai , "disable") == 0) { 344  i = 0; i < rvist ; i++) { 345  r = `togg_rvi ( rvis [ i ], ai )) { 347 `rtf ( dr , "\nSystemrror occured. (Error: %m)\n\n"); 351 `tf ("%sd svi %s\n", ai , rvis [ i ]); 355 `rtf ( dr , "Svi %iady %sd. Skpg...\n", rvis [ i ], ai ); 359 `rtf ( dr , "\nUbˁ%rvi %s. (Svi hanviduev symlk).\n\n", ai , rvis [ i ]); 364 i( r == -1) { 365 r = 1; 370 } i( `rcmp ( ai , "boot-status") == 0) { 372  i = 0; i < rvist ; i++) { 373  `g_bo_us ( rvis [ i ])) { 375 r = 1; 376 `rtf ( dr , "\nSystemrror occured. (Error: %m)\n\n"); 380 `tf ("%idibd obo.\n", rvis [ i ]); 384 `tf ("%iabd obo.\n", rvis [ i ]); 388 `tf ("%inهvaab f bo. (Svi hanvid symlk ieh % %s).\n", rvis [ i ], abd_th , dibd_th ); 393 i( r == 1) { 398 } i( `rcmp ( ai , "list-services") == 0) { 400 `tf ("\nSvif܇dd %s:\n", add ); 401  i = 0; i < rvist ; i++) { 402 `tf (" %s\n", rvis [ i ]); 404 `tf ("\n"); 407 `rtf ( dr , "\nBadrgumgiv.\n\n%s\n\n", uge ); 408 r = 1; 412  i = 0; i < rvist ; i++) 413 ` ( rvis [ i ]); 414 ` ( rvis ); 416  r ; 417 } } @misc-progs/backupctrl.c 8  ~"tuid.h " 10  $ma ( gc , ** gv ) { 11 i(! `tuid ()) 12 `ex (1); 14  `run ("/v/fe/backup/b/backup.", gv + 1); 15 } } @misc-progs/captivectrl.c 6  #_BSD_SOURCE ) 7  #_XOPEN_SOURCE ) 9  ~ 10  ~ 11  ~ 12  ~ 14  ~"libsmoh.h " 15  ~"tuid.h " 17  #CAPTIVE_PORTAL_SETTINGS CONFIG_ROOT "/ive/gs" ) 18  #ETHERNET_SETTINGS CONFIG_ROOT "/ht/gs" ) 20  #CLIENTS CONFIG_ROOT "/ive/s" ) 21  #IPTABLES "/sb/bˠ--wa" ) 22  #HTTP_PORT 80 ) 23  #REDIRECT_PORT 1013 ) 25  s { 26  mhaddr [ STRING_SIZE ]; 27  maddr [ STRING_SIZE ]; 28 time_t mtime_t ; 29  mexpes ; 31  * mxt ; 32 } t_t ; 34  time_t $r_time (cڡ * s ) { 35  t = 0; 37 i( `ssnf ( s , "%d", & t ) == 1) { 38  ( time_t ) t ; 42 } } 44 * $fm_time (cڡ time_t * t ) { 45  bufr [ STRING_SIZE ]; 47  tm *m = `gmtime ( t ); 48 i( tm = NULL ) 49  NULL ; 51 `rime ( bufr , (bufr), "%Y-%m-%dT%H:%M", tm ); 53  `rdup ( bufr ); 54 } } 56  _t * $ad_s (* fame ) { 57 FILE * f = NULL ; 59 i(!( f = `fݒ ( fame , "r"))) { 60 `rtf ( dr , "Could ocfiguti fe: %s\n", fame ); 61  NULL ;; 64  le [ STRING_SIZE ]; 66 _t * _f = NULL ; 67 _t * _ϡ = NULL ; 68 _t * _cu ; 70 ( `fgs ( le , STRING_SIZE , f ! NULL )) { 71 i( le [ ` (line) - 1] == '\n') 72 le [ ` (line) - 1] = '\0'; 75 i(* le == '#') 78 _cu = ( _t *) `mloc ((client_t)); 79 `memt ( _cu , 0, ( _t )); 81 i( _f = NULL ) 82 _f = _cu ; 84 _ϡ -> xt = _cu ; 85 _ϡ = _cu ; 87  cou = 0; 88 * l = le ; 90 i(!* l ) 93 * wd = l ; 94 * l != '\0') { 95 i(* l == ',') { 96 * l = '\0'; 97 l ++; 100 l ++; 103  cou ++) { 106 `ry ( _cu -> haddr , wd ); 111 `ry ( _cu -> addr , wd ); 116 _cu -> time_t = `r_time ( wd ); 121 _cu -> expes = `oi ( wd ); 130 i( f ) 131 `fo ( f ); 133  _f ; 134 } } 136  $ush_chas () { 138 `_syem ( IPTABLES " -F CAPTIVE_PORTAL"); 139 `_syem ( IPTABLES " -F CAPTIVE_PORTAL_CLIENTS"); 142 `_syem ( IPTABLES " -tat -F CAPTIVE_PORTAL"); 143 } } 145  $tup_dns_frs () { 146 cڡ * os [] = { "udp", "t", NULL }; 150 cڡ * lim = "-m hashlimit --hashlimit-name dns-filter" 153  commd [ STRING_SIZE ]; 155 cڡ ** o = os ; 156 * o ) { 157 `tf ( commd , (commd), IPTABLES " -A CAPTIVE_PORTAL_CLIENTS -p %s" 158 " --dp܈53 %-j RETURN", * o , lim ); 160  r = `_syem ( commd ); 161 i( r ) 162  r ; 164 o ++; 168 } } 170  $add__rus (cڡ _t * s ) { 171  commd [ STRING_SIZE ]; 172  mch [ STRING_SIZE ]; 174  s ) { 175 size_t n = 0; 177 i(* s -> addr && cls-> expes > 0) { 178 n + `tf ( mch +en, (match) -en, 179 "-%s", s -> addr ); 182 n + `tf ( mch +en, (match) -en, 183 " -m ma--mac-sour %s", s -> haddr ); 185 i( s -> expes > 0) { 186 time_t expes = s -> time_t + clients->expires; 188 * time_t = `fm_time (& s ->time_start); 189 * time_d = `fm_time (& expes ); 191 n + `tf ( mch +en, (match) -en, 193 time_t , time_d ); 195 ` ( time_t ); 196 ` ( time_d ); 200 `tf ( commd , (commd), IPTABLES " -A CAPTIVE_PORTAL_CLIENTS" 201 " %-j RETURN", mch ); 202 `_syem ( commd ); 205 `tf ( commd , (commd), IPTABLES " -tat -A CAPTIVE_PORTAL" 206 " %-j RETURN", mch ); 207 `_syem ( commd ); 210 s = cls-> xt ; 214 } } 216 * $g_key ( keyvue * gs , * key ) { 217  vue [ STRING_SIZE ]; 219 i(! `fdkey ( gs , key , vue )) 220  NULL ; 222  `rdup ( vue ); 223 } } 225  $add_r_ru (cڡ * tf ,  low_webif_acss ) { 226  r ; 227  commd [ STRING_SIZE ]; 229 i(( tf = NULL || ( ` (intf) == 0)) { 230 `rtf ( dr , "Empty interface given\n"); 234 `tf ( commd , (commd), IPTABLES " -A CAPTIVE_PORTAL -i %s" 235 " -j CAPTIVE_PORTAL_CLIENTS", tf ); 236 r = `_syem ( commd ); 237 i( r ) 238  r ; 240 i( low_webif_acss ) { 241 `tf ( commd , (commd), IPTABLES " -A CAPTIVE_PORTAL_CLIENTS" 242 " -%-t --dp܈444 -j RETURN", tf ); 243 r = `_syem ( commd ); 244 i( r ) 245  r ; 249 `tf ( commd , (commd), IPTABLES " -tat -A CAPTIVE_PORTAL -i %s" 250 " -t --dp܈%d -j REDIRECT --to-pt%d", tf , HTTP_PORT , REDIRECT_PORT ); 251 r = `_syem ( commd ); 252 i( r ) 253  r ; 256 `tf ( commd , (commd), IPTABLES " -A CAPTIVE_PORTAL_CLIENTS" 257 " -%-t --dp܈%d -j RETURN", tf , REDIRECT_PORT ); 258 r = `_syem ( commd ); 259 i( r ) 260  r ; 263 } } 265  $add_r_rus ( keyvue * ive_p܏l_gs , keyvue* ht_gs ) { 266 cڡ * tf ; 267 * g ; 268  r = 0; 270 g = `g_key ( ive_p܏l_gs , "ENABLE_GREEN"); 271 i( g && ( `rcmp (setting, "on") == 0)) { 272 ` ( g ); 274 tf = `g_key ( ht_gs , "GREEN_DEV"); 275 r = `add_r_ru ( tf , 1); 276 i( r ) 277  r ; 280 g = `g_key ( ive_p܏l_gs , "ENABLE_BLUE"); 281 i( g && ( `rcmp (setting, "on") == 0)) { 282 ` ( g ); 284 tf = `g_key ( ht_gs , "BLUE_DEV"); 285 r = `add_r_ru ( tf , 0); 286 i( r ) 287  r ; 291 r = `tup_dns_frs (); 292 i( r ) 293  r ; 296 r = `_syem ( IPTABLES " -A CAPTIVE_PORTAL_CLIENTS -j DROP"); 297 i( r ) 298  r ; 300  r ; 301 } } 303  $ma ( gc , ** gv ) { 304  r = 0; 305 * tf = NULL ; 306 _t * s = NULL ; 308  keyvue * ive_p܏l_gs = NULL ; 309  keyvue * ht_gs = NULL ; 311 i(!( `tuid ())) 312 `ex (2); 314 ht_gs = `keyvues (); 315 i(! `adkeyvues ( ht_gs , ETHERNET_SETTINGS )) { 316 `rtf ( dr , "Couldلd %s\n", ETHERNET_SETTINGS ); 317 r = 1; 318  END ; 321 ive_p܏l_gs = `keyvues (); 322 i(! `adkeyvues ( ive_p܏l_gs , CAPTIVE_PORTAL_SETTINGS )) { 323 `rtf ( dr , "Couldلd %s\n", CAPTIVE_PORTAL_SETTINGS ); 324 r = 1; 325  END ; 328 s = `ad_s ( CLIENTS ); 331 `ush_chas (); 334 r = `add__rus ( s ); 335 i( r ) 336  END ; 339 r = `add_r_rus ( ive_p܏l_gs , ht_gs ); 340 i( r ) 341  END ; 343 END : 344  s ) { 345 _t * hd = s ; 346 s = cls-> xt ; 348 ` ( hd ); 351 i( ht_gs ) 352 `keyvues ( ht_gs ); 354 i( ive_p܏l_gs ) 355 `keyvues ( ive_p܏l_gs ); 357 i( tf ) 358 ` ( tf ); 360  r ; 361 } } @misc-progs/clamavctrl.c 8  ~ 9  ~ 10  ~ 11  ~ 12  ~ 13  ~ 14  ~"tuid.h " 16  $ma ( gc , * gv []) { 18 i(!( `tuid ())) 19 `ex (1); 21 i( gc < 2) { 22 `rtf ( dr , "\nNorgument given.\n\nclamavctrl (start|stop|restart)\n\n"); 23 `ex (1); 26 i( `rcmp ( gv [1], "start") == 0) { 27 `_syem ("/etc/rc.d/init.d/clamav start"); 28 } i( `rcmp ( gv [1], "stop") == 0) { 29 `_syem ("/etc/rc.d/init.d/clamav stop"); 30 } i( `rcmp ( gv [1], "restart") == 0) { 31 `_syem ("/etc/rc.d/init.d/clamavestart"); 32 } i( `rcmp ( gv [1], "enable") == 0) { 33 `_syem ("ln -fs ../init.d/clamav /etc/rc.d/rc3.d/S33clamav >/dev/null 2>&1"); 34 `_syem ("ln -fs ../init.d/clamav /etc/rc.d/rc0.d/K67clamav >/dev/null 2>&1"); 35 `_syem ("ln -fs ../init.d/clamav /etc/rc.d/rc6.d/K67clamav >/dev/null 2>&1"); 36 `_syem ("/etc/rc.d/init.d/clamav start"); 37 } i( `rcmp ( gv [1], "disable") == 0) { 38 `_syem ("/etc/rc.d/init.d/clamav stop"); 39 `_syem ("rm -f /etc/rc.d/rc*.d/*clamav >/dev/null 2>&1"); 41 `rtf ( dr , "\nBadrgument given.\n\nclamavctrl (start|stop|restart)\n\n"); 42 `ex (1); 46 } } @misc-progs/collectdctrl.c 8  ~ 9  ~ 10  ~ 11  ~ 12  ~ 13  ~"tuid.h " 15  $ma ( gc , * gv []) { 16 i(!( `tuid ())) 17 `ex (1); 19 i( gc < 2) { 20 `rtf ( dr , "\nNorgument given.\n\ncollectdctrl (start|stop|restart)\n\n"); 21 `ex (1); 24 i( `rcmp ( gv [1], "restart") == 0) { 25 `_syem ("/etc/rc.d/init.d/collectdestart"); 27 } i( `rcmp ( gv [1], "stop") == 0) { 28 `_syem ("/etc/rc.d/init.d/collectd stop"); 30 } i( `rcmp ( gv [1], "start") == 0) { 31 `_syem ("/etc/rc.d/init.d/collectd start"); 34 `rtf ( dr , "\nBadrgument given.\n\ncollectdctrl (start|stop|restart)\n\n"); 35 `ex (1); 39 } } @misc-progs/ddnsctrl.c 8  ~ 9  ~ 10  ~ 11  ~ 13  ~"tuid.h " 15 cڡ * gcffe = "/var/ipfire/ddns/ddns.conf"; 17  $ma ( gc , * gv []) { 18  cmd [ STRING_SIZE ]; 20 i(!( `tuid ())) 21 `ex (1); 23 i( gc < 2) { 24 `rtf ( dr , "\nNorgument given.\n\nddnsctrl (update-all)\n\n"); 25 `ex (1); 28 i( `rcmp ( gv [1], "update-all") == 0) { 29 `tf ( cmd , (cmd), "/u/b/ddn--cfig %upde->/dev/nu 2>&1", cffe ); 30 `_syem ( cmd ); 32 `rtf ( dr , "\nBadrgument given.\n\nddnsctrl (update-all)\n\n"); 33 `ex (1); 37 } } @misc-progs/dhcpctrl.c 8  ~ 9  ~ 10  ~ 11  ~ 12  ~ 13  ~ 14  ~"tuid.h " 16  $ma ( gc , * gv []) { 18 i(!( `tuid ())) 19 `ex (1); 21 i( gc < 2) { 22 `rtf ( dr , "\nNorgument given.\n\ndhcpctrl (start|stop|restart|reload)\n\n"); 23 `ex (1); 26 i( `rcmp ( gv [1], "start") == 0) { 27 `_syem ("/etc/rc.d/init.d/dhcp start"); 28 } i( `rcmp ( gv [1], "stop") == 0) { 29 `_syem ("/etc/rc.d/init.d/dhcp stop"); 30 } i( `rcmp ( gv [1], "restart") == 0) { 31 `_syem ("/etc/rc.d/init.d/dhcpestart"); 32 } i( `rcmp ( gv [1], "reload") == 0) { 33 `_syem ("/etc/rc.d/init.d/dhcpeload"); 34 } i( `rcmp ( gv [1], "enable") == 0) { 35 `_syem ("ln -fs ../init.d/dhcp /etc/rc.d/rc3.d/S30dhcp >/dev/null 2>&1"); 36 `_syem ("ln -fs ../init.d/dhcp /etc/rc.d/rc0.d/K30dhcp >/dev/null 2>&1"); 37 `_syem ("ln -fs ../init.d/dhcp /etc/rc.d/rc6.d/K30dhcp >/dev/null 2>&1"); 38 } i( `rcmp ( gv [1], "disable") == 0) { 39 `_syem ("rm -f /etc/rc.d/rc*.d/*dhcp >/dev/null 2>&1"); 41 `rtf ( dr , "\nBadrgument given.\n\ndhcpctrl (start|stop|restart|reload)\n\n"); 42 `ex (1); 46 } } @misc-progs/extrahdctrl.c 8  ~"tuid.h " 10  $ma ( gc , ** gv ) { 11 i(! `tuid ()) 12 `ex (1); 14  `run ("/v/fe/exahd/b/exahd.", gv + 1); 15 } } @misc-progs/fireinfoctrl.c 12  ~ 13  ~"tuid.h " 15  $ma () 17 i(!( `tuid ())) 18 `ex (1); 20 `_syem ("/usr/bin/sendprofile"); 23 } } @misc-progs/firewallctrl.c 8  ~ 10  ~"tuid.h " 12  $ma ( gc , * gv []) { 13 i(!( `tuid ())) 14 `ex (1); 16  tv = `_syem ("/usr/lib/firewall/rules.pl"); 20 i( tv == 0) { 21 `uƚk ("/var/ipfire/firewall/reread"); 25 } } @misc-progs/getconntracktable.c 10  ~ 11  ~ 12  ~"tuid.h " 14  $ma () { 15 i(!( `tuid ())) 16 `ex (1); 18 FILE * = `fݒ ("/proc/net/nf_conntrack", "r"); 19 i( = NULL ) { 20 `ex (1); 24  lebuf [ STRING_SIZE ]; 25  `fgs ( lebuf , STRING_SIZE , )) { 26 `tf ("%s", lebuf ); 29 `fo ( ); 31 } } @misc-progs/getipstat.c 16  ~ 17  ~ 18  ~ 19  ~ 20  ~ 21  ~"tuid.h " 23  $ma ( gc , ** gv ) 30 * gs [] = {"--li", "--vbo", "--numic", "--wa", "5", NULL , NULL, NULL, NULL}; 31 * uge = "getipstat [-x][-f|-n|-m]"; 32  pcou = 5; 33  b_t = 0; 35  t ; 37 i(!( `tuid ())) 38 `ex (1); 41 i( gc > 1) { 42 ( t = `gt ( gc , gv , "xfnm")) != -1) { 43  t ) { 45 gs [ pcou ++] = "--exact"; 48 b_t ++; 51 i( b_t == 0) { 52 gs [ pcou ++] = "--table"; 53 gs [ pcou ++] = "nat"; 55 b_t ++; 58 i( b_t == 0) { 59 gs [ pcou ++] = "--table"; 60 gs [ pcou ++] = "mangle"; 62 b_t ++; 65 `rtf ( dr , "\nBadrgumgiv.\n\n%s\n", uge ); 66 `ex (1); 69 i( b_t > 1) { 70 `rtf ( dr , "\nArgumt-f/-n/-m mutuyxusive.\n\n%s\n", uge ); 71 `ex (1); 75  `run ("/sb/bs", gs ); 76 } } @misc-progs/iowrap.c 14  ~ 15  ~ 16  ~ 17  ~ 18  ~ 20  $ma ( gc , * gv []) 23 i( gc >= 2) 25  fd ; 27 i(( fd = `ݒ ( gv [1], O_RDWR )) == -1) 29 `tf ("Couldn't open device\n"); 32 `dup2 ( fd , 0); 33 `dup2 ( fd , 1); 34 `dup2 ( fd , 2); 38 i( gc >= 3) 39 `execvp ( gv [2], &argv[2]); 41 `tf ("No command\n"); 44 } } @misc-progs/ipfirereboot.c 24  ~ 25  ~ 26  ~ 27  ~"tuid.h " 31  #OP_REBOOT "bo" ) 32  #OP_REBOOT_FS "bofs" ) 33  #OP_SHUTDOWN "down" ) 35  $ma ( gc , ** gv ) 38 i(!( `tuid ())) 42 i( gc ==1) 44 `rtf ( dr , "Missingeboot command!\n"); 48 i( gc ==2 && `rcmp ( gv [1], OP_SHUTDOWN )==0) 50 `_syem ("/sbin/shutdown -how"); 54 i( gc ==2 && `rcmp ( gv [1], OP_REBOOT )==0) 56 `_syem ("/sbin/shutdown -row"); 60 i( gc ==2 && `rcmp ( gv [1], OP_REBOOT_FS )==0) 62 `_syem ("/sbin/shutdown -F -row"); 66 `rtf ( dr , "Badeboot command!\n"); 68 } } @misc-progs/ipsecctrl.c 8  ~"libsmoh.h " 9  ~ 10  ~ 11  ~ 12  ~ 13  ~ 14  ~ 15  ~ 17  ~"tuid.h " 18  ~"tut.h " 35  $uge () { 36 `rtf ( dr , "Usage:\n"); 37 `rtf ( dr , "\tipsecctrl S [connectionkey]\n"); 38 `rtf ( dr , "\tipsecctrl D [connectionkey]\n"); 39 `rtf ( dr , "\tipsecctrl R\n"); 40 `rtf ( dr , "\tipsecctrl I\n"); 41 `rtf ( dr , "\t\tS : Start/Restart Connection\n"); 42 `rtf ( dr , "\t\tD : Stop Connection\n"); 43 `rtf ( dr , "\t\tR : Reload Certificatesnd Secrets\n"); 44 `rtf ( dr , "\t\tI : Print Statusinfo\n"); 45 } } 47  $c_ld () { 51 `_syem ("/usr/sbin/ipsecereadall >/dev/null 2>&1"); 52 `_syem ("/usr/sbin/ipseceload >/dev/null 2>&1"); 53 } } 58  $decode_le (* s , 59 ** key , 60 ** me , 61 ** ty 63  cou = 0; 64 * key = NULL ; 65 * me = NULL ; 66 * ty = NULL ; 68 i( s [ ` (s) - 1] == '\n') 69 s [ ` (s) - 1] = '\0'; 71 * su = `rp (& s , ","); 72  su ) { 73 i( cou == 0) 74 * key = su ; 75 i(( cou =1&& `rcmp ( su , "on") != 0) 77 i( cou == 2) 78 * me = su ; 79 i( cou == 4) 80 * ty = su ; 81 cou ++; 82 su = `rp (& s , ","); 86 i(! * me ) 89 i( `rn (* me , LETTERS_NUMBERS ! ` (*name)) { 90 `rtf ( dr , "Bad ciڂame: %s\n", * me ); 94 i(! ( `rcmp (* ty , "host") == 0 || strcmp(*type, "net") == 0)) { 95 `rtf ( dr , "Bad ciځy: %s\n", * ty ); 101 } } 106  $tu_ci_ (* me , * ty ) { 112  commd [ STRING_SIZE ]; 115 `tf ( commd , STRING_SIZE - 1, 116 "/u/sb/dow%>/dev/nu", me ); 117 `_syem ( commd ); 120 `_syem ("/usr/lib/firewall/ipsec-policy >/dev/null"); 123 `_syem ("/usr/local/bin/ipsec-interfaces >/dev/null"); 126 `c_ld (); 129 `tf ( commd , STRING_SIZE - 1, 130 "/u/sb/rokup-nb %>/dev/nu", me ); 131 `_syem ( commd ); 132 } } 137  $tu_ci_off (* me ) { 142  commd [ STRING_SIZE ]; 145 `c_ld (); 148 `tf ( commd , STRING_SIZE - 1, 149 "/u/sb/dow%>/dev/nu", me ); 150 `_syem ( commd ); 153 `_syem ("/usr/lib/firewall/ipsec-policy >/dev/null"); 156 `_syem ("/usr/local/bin/ipsec-interfaces >/dev/null"); 157 } } 159  $ma ( gc , * gv []) { 160  keyvue * kv = NULL ; 162 i( gc < 2) { 163 `uge (); 164 `ex (1); 166 i(!( `tuid ())) 167 `ex (1); 169 FILE * fe = NULL ; 171 i( `rcmp ( gv [1], "I") == 0) { 172 `_syem ("/usr/sbin/ipsec status"); 173 `ex (0); 176 i( `rcmp ( gv [1], "R") == 0) { 177 `c_ld (); 178 `ex (0); 183 `sigl ( SIGCHLD , SIG_DFL ); 186 i( gc == 2) { 187 i( `rcmp ( gv [1], "D") == 0) { 188 `_syem ("/usr/sbin/ipsec stop >/dev/null 2>&1"); 189 `_syem ("/usr/lib/firewall/ipsec-policy >/dev/null"); 190 `_syem ("/usr/local/bin/ipsec-interfaces >/dev/null"); 191 `ex (0); 196 kv = `keyvues (); 197 i(! `adkeyvues ( kv , CONFIG_ROOT "/vpn/settings")) 199 `rtf ( dr , "Cannotead vpn settings\n"); 200 `ex (1); 205  s [ STRING_SIZE ]; 206 `fdkey ( kv , "ENABLED", s ); 207 `keyvues ( kv ); 208 i( `rcmp ( s , "on") != 0) 209 `ex (0); 212  s [ STRING_SIZE ]; 215 i(( gc =2&& `rcmp ( gv [1], "S") == 0) { 216 `_syem ("/usr/lib/firewall/ipsec-policy >/dev/null"); 217 `_syem ("/usr/local/bin/ipsec-interfaces >/dev/null"); 218 `_syem ("/usr/sbin/ipsecestart >/dev/null"); 219 `ex (0); 224 i(( gc =2|| `rn ( gv [2], NUMBERS ! ` (argv[2])) { 225 `rtf ( dr , "Badrg: %s\n", gv [2]); 226 `uge (); 227 `ex (1); 231 i(!( fe = `fݒ ( CONFIG_ROOT "/vpn/config", "r"))) { 232 `rtf ( dr , "Couldn't open vpn settings file"); 233 `ex (1); 235  `fgs ( s , STRING_SIZE , fe ! NULL ) { 236 * key ; 237 * me ; 238 * ty ; 239 i(! `decode_le ( s ,& key ,& me ,& ty )) 243 i( `rcmp ( gv [2], key ) != 0) 247 i( `rcmp ( gv [1], "S") == 0) 248 `tu_ci_ ( me , ty ); 249 i( `rcmp ( gv [1], "D") == 0) 250 `tu_ci_off ( me ); 252 `rtf ( dr , "Bad command\n"); 253 `ex (1); 256 `fo ( fe ); 259 } } @misc-progs/list.h 3 #ide LIST_H 4  #LIST_H ) 6  sli { 7  li * mxt , * mev ; 8 } tli_t ; 10  le  $li_lk ( li * a , li * b ) 12 a -> xt = b ; 13 b -> ev = a ; 14 } } 16  le  $li_add ( li * hd , li * em ) 18  li * f = hd -> xt ; 19 `li_lk ( hd , em ); 20 `li_lk ( em , f ); 21 } } 23  le  $li_add_d ( li * hd , li * em ) 25  li * ϡ = hd -> ev ; 26 `li_lk ( em , hd ); 27 `li_lk ( ϡ , em ); 28 } } 30  le li_t * $li_d ( li * em ) 32  li * ev = em ->ev, * xt = item->next; 33 `li_lk ( ev , xt ); 34  xt ; 35 } } 37  le  $li_ ( li * hd ) 39 `li_lk ( hd , head); 40 } } 43  le  $li_d_add ( li_t * hd ,i_* em ) 45 li_t * ev = em ->ev, * xt = item->next; 46 `li_lk ( ev , xt ); 47 xt = hd ->next; 48 `li_lk ( hd , em ); 49 `li_lk ( em , xt ); 50 } } 64  le  $li_d_add_d ( li_t * hd ,i_* em ) 66 li_t * ev = em ->ev, * xt = item->next; 67 `li_lk ( ev , xt ); 68 ev = hd ->prev; 69 `li_lk ( em , hd ); 70 em -> ev =rev; 71 ev -> xt = em ; 72 } } 74  le  $li_d_ ( li * em ) 76  li * ev = em ->ev, * xt = item->next; 77 `li_lk ( em , item); 78 `li_lk ( ev , xt ); 79 } } 81  le  $li_jo ( li * a , li * b ) 83 li_t * = a -> ev ; 84 li_t * be = b -> ev ; 85 b -> ev = ; 86 a -> ev = be ; 87 -> xt = b ; 88 be -> xt = a ; 89 } } 91  le  $li_emy ( li * hd ) 93  hd -> xt == head; 94 } } 96  #LIST ( L  li L = {&L, &L} ) 98  #li_y ( L , T , M ((T*)((*)(L- ()(&((T*)0)->M))) ) 99  #li_em ( L , T , M ((T*)((*)(L- ()(&((T*)0)->M))) ) 101  #li_f ( H , T , M `li_em ((H)-> xt , T, M) ) 102  #li_ϡ ( H , T , M `li_em ((H)-> ev , T, M) ) 103  #li_xt ( O , M `li_em ((O)->M. xt , `tyof (*(O)), M) ) 106  le  li * $li_g ( li * hd ) 108  li * em = hd -> xt ; 109  li * xt = em ->next; 110 `li_lk ( hd , xt ); 111  em ; 112 } } 115  le  li * $li_g_ ( li * hd ) 117  li * em = hd -> xt ; 118  li * xt = em ->next; 119 `li_lk ( em , item); 120 `li_lk ( hd , xt ); 121  em ; 122 } } 124  #li_g_y ( H , T , M `li_em ( `li_g ((H)), T, M) ) 125  #li_g__y ( H , T , M `li_em ( `li_g_ ((H)), T, M) ) 126  #li_g_em ( H , T , M `li_em ( `li_g ((H)), T, M) ) 127  #li_g__em ( H , T , M `li_em ( `li_g_ ((H)), T, M) ) @misc-progs/logwatch.c 12  ~ 13  ~ 14  ~ 15  ~ 16  ~ 17  ~ 18  ~ 19  ~"libsmoh.h " 20  ~"tuid.h " 41  $ma () 43  bufr [ STRING_SIZE ]; 44  keyvue * kv = NULL ; 45  sswd * pw ; 46 gid_t groups [2]; 47 * gv [4]; 49 if( `guid ()) 51 `rtf ( dr , "logwatch should bean byoot\n"); 52 `ex (1); 56 kv = `keyvues (); 58 i(! `adkeyvues ( kv , CONFIG_ROOT "/logging/settings")) 60 `rtf ( dr , "Cannotead syslog settings\n"); 61 `ex (1); 64 i(! `fdkey ( kv , "LOGWATCH_LEVEL", bufr )) 66 `rtf ( dr , "Cannotead LOGWATCH_LEVEL\n"); 67 `ex (1); 70 i( `rcmp ( bufr ,"Low") && strcmp(buffer,"Med") && strcmp(buffer,"High")) 72 `rtf ( dr , "Bad LOGWATCH_LEVEL: %s\n", bufr ); 73 `ex (1); 76 `keyvues ( kv ); 80 if(!( pw = `gpwm ("logwatch"))) 82 `rtf ( dr ,"Couldn't findogwatch user.\n"); 83 `ex (1); 86 `memt ( pw -> pw_sswd , 0, ` (pw->pw_passwd)); 87 `dpwt (); 90 if(! pw -> pw_uid || !pw-> pw_gid ) 92 `rtf ( dr ,"logwatch userppearso be UID or GID 0,borting.\n"); 93 `ex (1); 97 groups [0] = groups[1] = pw -> pw_gid ; 98 i( `tgroups (1, groups ){ ` ("Couldn'grouli"); `ex (1); } 99 i( `tgid ( pw -> pw_gid ){ ` ("Couldn'tgidogwch)"); `ex (1); } 100 i( `tuid ( pw -> pw_uid ){ ` ("Couldn'tuidogwch)"); `ex (1); } 103 gv [0] = "logwatch.pl"; 104 gv [1] = "--detail"; 105 gv [2] = bufr ; 106 gv [3] = NULL ; 107 `execve ("/u/she/logwch/sts/logwch.", gv , ued_v ); 110 ` ("logwatch:xecve failed"); 111 `ex (1); 112 } } @misc-progs/netutil.h 2 #ide NETUTIL_H 3  #NETUTIL_H 1 ) 5  ~ 7  #LETTERS "abcdefghijklmnqruvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ) 8  #NUMBERS "0123456789" ) 9  #LETTERS_NUMBERS LETTERS NUMBERS ) 10  #IP_NUMBERS "./" NUMBERS ) 11  #PORT_NUMBERS ":-" NUMBERS ) 12  #VALID_FQDN LETTERS_NUMBERS ".-" ) 14  #VALID_IP ( ( ` (ip) > 6 \ 15 && ` ( ) < 16 \ 16 && `rn ( , NUMBERS "."= ` ()) ) 18  #VALID_IP_AND_MASK ( ( ` (ip) > 6 \ 19 && ` ( ) < 32 \ 20 && `rn ( , IP_NUMBERS = ` ()) ) 22  #VALID_PORT ( pt ( ` (port) \ 23 && ` ( pt ) < 6 \ 24 && `rn ( pt , NUMBERS = ` t)) ) 26  #VALID_PORT_RANGE ( pt ( ` (port) \ 27 && ` ( pt ) < 12 \ 28 && `rn ( pt , PORT_NUMBERS = ` t)) ) 30  #VALID_SHORT_MASK ( ( ` (ip) > 1 \ 31 && ` ( ) < 3 \ 32 && `rn ( , NUMBERS = ` ()) ) 36  #VALID_DEVICE ( dev ( ` (dev) \ 37 && ` ( dev ) < 16 \ 38 && `rn ( dev , LETTERS_NUMBERS ":."= ` (dev)) ) 44  #VALID_PROTOCOL ( ( ` (prot) \ 45 && ` ( ) <16 \ 46 && `rn ( , LETTERS_NUMBERS "-"= ` r)) ) @misc-progs/openvpnctrl.c 1  #_DEFAULT_SOURCE ) 2  #_XOPEN_SOURCE 500 ) 3  ~ 4  ~ 5  ~ 6  ~ 7  ~ 8  ~ 9  ~ 10  ~ 11  ~ 12  ~ 13  ~"tuid.h " 14  ~"tut.h " 15  ~"libsmoh.h " 17  #noovdebug ) 20  keyvue * gkv = NULL ; 21 FILE * gife = NULL ; 23  gdif [ STRING_SIZE ]; 24  gblueif [ STRING_SIZE ]; 25  gܪgeif [ STRING_SIZE ]; 26  gab˻d [ STRING_SIZE ] = "off"; 27  gabblue [ STRING_SIZE ] = "off"; 28  gabܪge [ STRING_SIZE ] = "off"; 31  gOVPNINPUT [ STRING_SIZE ] = "OVPNINPUT"; 32  gOVPNBLOCK [ STRING_SIZE ] = "OVPNBLOCK"; 33  gOVPNNAT [ STRING_SIZE ] = "OVPNNAT"; 34  gWRAPPERVERSION [ STRING_SIZE ] = "ipfire-2.2.4"; 36  sci_ru { 37  mme [ STRING_SIZE ]; 38  mty [ STRING_SIZE ]; 39  mo [ STRING_SIZE ]; 40  mus [ STRING_SIZE ]; 41  mlol_subt [ STRING_SIZE ]; 42  msr_subt [ STRING_SIZE ]; 43  mre [ STRING_SIZE ]; 44  mpt [ STRING_SIZE ]; 45  ci_ru * mxt ; 48  ci_ru tci ; 50  $cursive_move_back (cڡ * h , cڡ  * sb ,  tyag ,  FTW * wbuf ) { 51  rv = `move ( h ); 52 i( rv ) 53 ` ( h ); 55  rv ; 56 } } 58  $cursive_move (cڡ * th ) { 59  `nw ( th , cursive_move_back , 64, FTW_DEPTH | FTW_PHYS ); 60 } } 62  $exhdr () 64 if( kv ) 65 `keyvues ( kv ); 66 i( ife ) 67 `fo ( ife ); 68 } } 70  $uge () 72 #ifde ovdebug 73 `tf ("W f OnVPN %s-debug\n", WRAPPERVERSION ); 75 `tf ("W f OnVPN %s\n", WRAPPERVERSION ); 77 `tf ("openvpnctrl