home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1999 March B / SCO_CASTOR4RRT.iso / osmp / root.2 / usr / lib / scoadmin / psrsetup / psrsetupOsa / psrsetupOsa~
Text File  |  1998-08-19  |  5KB  |  173 lines

  1.  
  2. # Copyright (c) 1992-1998 The Santa Cruz Operation, Inc.. All Rights Reserved. 
  3. #                                                                         
  4. #        THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE               
  5. #                   SANTA CRUZ OPERATION INC.                             
  6. #                                                                         
  7. #   The copyright notice above does not evidence any actual or intended   
  8. #   publication of such source code.                                      
  9.  
  10. #******************************************************************************
  11. #
  12. #    Copyright (C) 1992-1998 The Santa Cruz Operation, Inc.
  13. #        All Rights Reserved.
  14. #
  15. #    The information in this file is provided for the exclusive use of
  16. #    the licensees of The Santa Cruz Operation, Inc.  Such users have the
  17. #    right to use, modify, and incorporate this code into other products
  18. #    for purposes authorized by the license agreement provided they include
  19. #    this notice and the associated copyright notice with any such product.
  20. #    The information in this file is provided "AS IS" without warranty.
  21. #
  22. #===============================================================================
  23. #@package: SCO_PSRSETUPOSA_MSGS SCO_PSRSETUPOSA_MSGS
  24. proc SCO_PSRSETUPOSA_MSGS {} {}
  25. global SCO_PSRSETUPOSA_MSGS
  26. set SCO_PSRSETUPOSA_MSGS(@catalog@) {psrsetupOSA.cat@sa 1}
  27. set SCO_PSRSETUPOSA_MSGS(ERR_NOPROC) {1 {Could not get info on processor %s}}
  28. set SCO_PSRSETUPOSA_MSGS(ERR_NOSTATE) {2 {Could not get state of processor %s}}
  29. set SCO_PSRSETUPOSA_MSGS(ERR_NOOFFLN) {3 {Could not take processor %s offline}}
  30. set SCO_PSRSETUPOSA_MSGS(ERR_NOONLN) {4 {Could not bring processor %s online}}
  31. set SCO_PSRSETUPOSA_MSGS(ERR_NOFORK) {5 {Could not fork process}}
  32. set SCO_PSRSETUPOSA_MSGS(ERR_NOEXEC) {6 {Could not exec %s}}
  33. set SCO_PSRSETUPOSA_MSGS(ERR_NOINFO) {7 {Could not get processor info}}
  34. set sco_psrsetup_CDT(attributes) {}
  35. set sco_psrsetup_CDT(groups) {}
  36. set sco_psrsetup_CDT(operations) {
  37.     {
  38.         action
  39.         {
  40.             { function psrsetup_action }
  41.             { granularity perObject }
  42.         }
  43.     }
  44. }
  45. set sco_psrsetup_CDT(class) {sco psrsetup}
  46. set sco_psrsetup_CDT(superior) {}
  47. set sco_psrsetup_CDT(subordinates) {}
  48. set localhost [SaHostGetLocalName]
  49. proc psr:GetAllProcessorInfo {} {
  50.     set result [misc:ExecCommand /sbin/psrinfo "" 1]
  51.     if { [ lindex $result 0 ] != 0 } { 
  52.         return [list 1 [IntlLocalizeMsg SCO_PSRSETUPOSA_ERR_NOINFO ]]
  53.     }
  54.     return $result
  55. }
  56. proc psr:GetProcessorInfo { data } {
  57.     set psrno [lindex $data 0]
  58.     set result [misc:ExecCommand /sbin/psrinfo "-v $psrno" 1]
  59.     if { [ lindex $result 0 ] != 0 } {
  60.         return [list 1  [IntlLocalizeMsg SCO_PSRSETUPOSA_ERR_NOPROC $psrno] ]
  61.     } else {
  62.         set info ""
  63.         foreach i [lindex $result 1] {
  64.             append info $i
  65.             append info \n
  66.         }
  67.         return [list 0 $info]
  68.     }
  69. }
  70. proc psr:StartStopProcessor { data } {
  71.     set psrno [lindex $data 0]
  72.     set result [misc:ExecCommand /sbin/psrinfo "-s $psrno"]
  73.     if { [ lindex $result 0 ] != 0 } { 
  74.         return [list 1 [IntlLocalizeMsg SCO_PSRSETUPOSA_ERR_NOSTATE $psrno] ]
  75.     }
  76.     set online [lindex $result 1]
  77.     if { $online } {
  78.         set result [misc:ExecCommand /sbin/psradm "-f $psrno"]
  79.         if { [ lindex $result 0 ] != 0 } { 
  80.             return [list 1 [IntlLocalizeMsg SCO_PSRSETUPOSA_ERR_NOOFFLN $psrno] ]
  81.         }
  82.     } else {
  83.         set result [misc:ExecCommand /sbin/psradm "-n $psrno"]
  84.         if { [ lindex $result 0 ] != 0 } { 
  85.             return [list 1 [IntlLocalizeMsg SCO_PSRSETUPOSA_ERR_NOONLN $psrno] ]
  86.         }
  87.     }
  88.     return $result
  89. }
  90. proc misc:ExecCommand { prog arguments args } {
  91.     set l [llength $args]
  92.     set multi 0
  93.     set resultsfile ""
  94.     switch -exact -- $l {
  95.     1    {
  96.         set multi [lindex $args 0]
  97.         }
  98.     2    {
  99.         set multi [lindex $args 0]
  100.         upvar [lindex $args 1] exitcode
  101.         }
  102.     3    {
  103.         set multi [lindex $args 0]
  104.         upvar [lindex $args 1] exitcode
  105.         set resultsfile [lindex $args 2]
  106.         }
  107.     }
  108.     if { [cequal $resultsfile "" ] } {
  109.         set tmpfile "/tmp/.execCommand.out"
  110.     } else {
  111.         set tmpfile $resultsfile
  112.     }
  113.     if { [catch "open $tmpfile w" catchres] } {
  114.                 set msg "Could not open $tmpfile"
  115.                 return [ list 1 $msg ]
  116.         }
  117.     set fdout $catchres
  118.         set processID [fork]
  119.     if { $processID == 0 } {
  120.         dup $fdout stdout
  121.         dup $fdout stderr
  122.         catch {execl "$prog" "$arguments"} catchres
  123.         exit 255
  124.     } elseif { $processID == -1 } {
  125.                 return [ list 1 [IntlLocalizeMsg SCO_PSRSETUPOSA_ERR_NOFORK] ]
  126.                 exit 1
  127.         }
  128.     set pidinfo [wait $processID]
  129.     set exitcode [lindex $pidinfo 2]
  130.     close $fdout
  131.     switch -exact -- $exitcode {
  132.     255    {
  133.         set retVal 1
  134.         set retMsg [IntlLocalizeMsg SCO_PSRSETUPOSA_ERR_NOEXEC $prog]
  135.         }
  136.     default    {
  137.         set fd [ open $tmpfile r ]
  138.         if { $multi } {
  139.             set retMsg [list]
  140.             while { ![ eof $fd ] } {
  141.                 set foo [gets $fd]
  142.                 if { ! [ cequal $foo "" ] } {
  143.                     lappend retMsg $foo
  144.                 }
  145.             }
  146.         } else {
  147.             set retMsg [gets $fd]
  148.         }
  149.         close $fd
  150.         set retVal $exitcode
  151.         }
  152.     } 
  153.     if { [cequal $resultsfile "" ] && [ file exists $tmpfile ] } {
  154.                 unlink -nocomplain $tmpfile
  155.         }
  156.     return [list $retVal $retMsg]
  157. }
  158. proc psrsetup_action {class object refObject op subOp data attr attrValueList osaData} {
  159.     switch $subOp {
  160.         GetAllProcessorInfo {
  161.             return [psr:GetAllProcessorInfo]
  162.         }
  163.         GetProcessorInfo {
  164.             return [psr:GetProcessorInfo $data]
  165.         }
  166.         StartStopProcessor {
  167.             return [psr:StartStopProcessor $data]
  168.         }
  169.         default     { ErrorPush {} 1 SCO_OSA_ERR_NO_SUCH_ACTION $subOp }    }
  170.     return
  171. }
  172. OFBinding sco_psrsetup_CDT
  173.