Once upon a time, Derek Belrose <[EMAIL PROTECTED]> said: > Does anyone know if the cce daemon can accept remote connections via tcp/ip? > > I'm working on a utility to manipulate some custom data and was hoping that I > wouldn't have to write a daemon to sit on a port to control cce.
You can use SSH to open a secure connection and execute the cceclient. Here's a sample perl script (requires the Net::SSH::Perl module, which requires a bunch of other perl modules) that connects to the CCE via SSH. -- Chris Adams <[EMAIL PROTECTED]> Systems and Network Administrator - HiWAAY Internet Services I don't speak for anybody but myself - that's enough trouble. #!/usr/bin/perl -w # # Copyright (c) 2003 # Chris Adams <[EMAIL PROTECTED]> # ######################################################################## # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. ######################################################################## # # Sample program to connect to the Cobalt Configuration Engine on a remote # RaQ via SSH # use Net::SSH::Perl; use POSIX; use strict; # Host to connect to my $raq = shift @ARGV || die "no RaQ specified\n"; # Get the admin password my $pass = get_pass (); # Connect and authenticate my $ssh = Net::SSH::Perl->new ($raq, ( protocol => 2 ) ) or die "ssh($raq): $!\n"; $ssh->login ("admin", $pass) or die "login: $!\n"; my @cce = $ssh->open2 ("/usr/sausalito/bin/cceclient"); # Open CCE client and authenticate to it my @r = cceresp (@cce); die "Bad banner: ", join ("\n", @r), "\n" if ($r[$#r] !~ /^2/); @r = ccecmd (@cce, "auth " . "admin" . " " . $pass); die "no auth: ", join ("\n", @r), "\n" if ($r[$#r] !~ /^2/); # Find the admin user and print the data @r = ccecmd (@cce, "find User name = admin"); my ($admin_oid) = map { /^104 OBJECT (\d+)/ } @r; die "Can't find admin: ", join ("\n", @r), "\n" if (! $admin_oid); @r = ccecmd (@cce, "get " . $admin_oid); print join ("\n", grep { /^1/ } @r), "\n"; # Done @r = ccecmd (@cce, "endkey"); @r = ccecmd (@cce, "bye"); # Send a CCE command sub ccecmd { my ($read, $write, $cmd) = @_; print $write $cmd, "\n"; cceresp ($read); } # Get a CCE response sub cceresp { my ($read) = @_; my @resp = (); my $buf = ""; my $off = 0; # Read input as long as we get non-(success|failure) messages do { sysread ($read, $buf, $off, 8192) or die "sysread: $!\n"; push @resp, split (/\n/, $buf); # The last line may not have been a full line if ($buf !~ /\n$/) { $buf = pop @resp; $off = length ($buf); } else { $buf = ""; $off = 0; } } while ($resp[$#resp] =~ /^[139]/); return @resp; } sub get_pass { my $msg = shift || "RaQ admin password: "; open (TTY, "+< /dev/tty"); my $fd = select (TTY); $| = 1; select ($fd); my $tty = fileno (TTY); print TTY $msg; my $t = POSIX::Termios->new; $t->getattr ($tty); my $l = $t->getlflag; my $le = $l & ~(&POSIX::ECHO | &POSIX::ICANON); $t->setlflag ($le); $t->setattr ($tty, &POSIX::TCSANOW); my $pass = <TTY>; chomp $pass; $t->setlflag ($l); $t->setattr ($tty, &POSIX::TCSANOW); print TTY "\n"; die "No password\n" if (! $pass); close (TTY); return $pass; } _______________________________________________ cobalt-developers mailing list [EMAIL PROTECTED] http://list.cobalt.com/mailman/listinfo/cobalt-developers