Changeset - ba5d7bfefee2
[Not reviewed]
default
0 1 0
Nathan Brink (binki) - 16 years ago 2009-07-03 13:08:12
ohnobinki@ohnopublishing.net
sample main() function for distrend
1 file changed with 18 insertions and 15 deletions:
0 comments (0 inline, 0 general)
src/server/distrend.c
Show inline comments
 
@@ -28,113 +28,116 @@
 

	
 
#include <stdio.h>
 
#include "execio.h"
 

	
 
// needs to be implemented
 
#include "options.h"
 

	
 
#include <confuse.h>
 

	
 
#define max 100
 
// maximum number of stored jobs in memory, per job type (lux/blend). Eventually we can dump this data to disk, or atleast the remainder not in memory...
 

	
 
int jobnum = 0;
 

	
 
// Structures for storing job information
 
// OOOOOOkay so we really need a struct for frameset rather than just an array, because we should track who each frame was sent out to. Please do this, someone! :D
 
struct {
 
  char *name;
 
  char *submitter;
 
  char *email;
 
  int priority;
 
  struct frameset **frameset; // What exactly is this now? hehe
 
} blendjob[max];
 

	
 
struct {
 
  char *name;
 
  char *submitter;
 
  char *email;
 
  int priority;
 
  int mode; // 0 = Static Render, stop at Spp, or infinity if spp is null. Framerange is ignored || 1 = animation, stop at Spp and stay in framerange.
 
  int spp;
 
  struct frameset ** frameset;
 
} luxjob[max];
 

	
 

	
 

	
 

	
 
int main(int argc, char *argv[])
 
{
 

	
 
/* !!!!!!! Important notes !!!!!!!!!!!!
 

	
 
So, we need a common key. Maybe. Or we need to generate a key in registeruser() and get it to the client somehow.
 
If we use a common key, then we'll need different passphrases for each user, which would be kinda crazy. How can
 
we get a key generated on the server, and transferred to the client's distrend?
 

	
 
*/
 

	
 

	
 
// We need the conf parser code from options.c here!!!
 
char *username = "unregistered"; // get this from conf
 

	
 

	
 
  int cont = 1;
 
  struct distrend_listenset *listenset;
 
  struct distrend_config *config;
 
  distrend_do_config(argc, argv, &config);
 

	
 
// Checks if the conf is left at the default username
 
int registered;
 
 error: People, this is not C++
 
if(username == "unregistered") {
 
  fprintf(stderr,"\nYou have not set your username in distrend.conf!\nIf you need to register a username, run distrend -c username email@example.com\n\n");
 
  registered = 0;
 
}
 
else{
 
  fprintf(stderr,"Logging into the DistRen server...\n");
 
}
 
  distrend_listen(&listenset, config);
 
  /* This is called the ``main loop'' */
 
  while(cont)
 
    {
 
      struct distren_action *action;
 
      
 
      distrend_accept(&action);
 
      cont = distrend_do(action);
 
      distrend_action_free(action);
 
    }
 
  
 
  distrend_unlisten(listenset);
 
  distrend_config_free(config);
 

	
 
  return 0;
 
}
 

	
 

	
 

	
 
// Registration on server. Needs attention. (e.g., people could make tons of accounts with the key we give them...
 
// Set up distrend -c username email@example.com
 
// We must prevent multi-user-creation abuse, too.
 
void registeruser(char *username, char *email){
 
  // Logs into sandboxed user on zserver2 and registers a user. Should eventually generate a key on the server and return it to the user.
 
  // All created user accounts should be sandboxed accordingly, requiring a different skel, and the default shell to be rbash. They also
 
  // need a custom path, which can be defined in the .bash_profile of the skel. All activity of server-side configuration should be documented
 
  // to ease the creation of new distren servers, or it should be automated and made much more all-inclusive, not requiring much config.
 
  char buf[10];
 
  struct execio *testrem;
 
  char *execargv[] =
 
    {
 
  "ssh",
 
  "distren_setup@protofusion.org",
 
  "-i",
 
  "setup.rsa", // We gotta figure out how we're going to do the whole keys thing... maybe grab this key via http? But have a secret password compiled in distren to prevent fraud?
 
  "-p",
 
  "23",
 
  "sudo /usr/sbin/useradd",
 
  "-M",
 
  "-c",
 
  email,
 
  "-d",
 
  "/home/distren",
 
  "--gid",
 
  "541",
 
  username,
 
  (char *)NULL
 
  };
 
  size_t readlen;
 
  fprintf(stderr, "Opening stream:\n", execio_open(&testrem, "ssh", execargv));
 
  buf[9] = '\0'; // null-terminating the array...
 
  while(!execio_read(testrem, buf, 9, &readlen)) // What's with the readlen stuff?
 
    {
 
      if(readlen > 9) {
 
	fprintf(stderr, "!!!! Something is terribly wrong!\n");
 
      }
 
      if(buf == 0) {
 
	fprintf(stderr, "**** Operation successful, or so we hope. We got no output. Just kidding. You will never see this. Something else should catch this though! And registration should really have some sort of password.");
 
      }
 
    buf[readlen] = '\0'; // Null-terminating the end of it again based on how large the data is?
 
    fprintf(stderr, "read \"%s\"\n", buf);
 
    }
 
  execio_close(testrem);
0 comments (0 inline, 0 general)